我一直在寻找有关如何处理TCP消息成帧的例子。我看到很多例子,其中NetworkStreams被传递到StreamReader或StreamWriter对象,然后使用ReadLine或WriteLine方法来处理'\ n'分隔的消息。我的应用程序协议包含以'\ n'结尾的消息,因此NetworkStream似乎是要走的路。然而,我无法找到任何具体的例子,以正确的方式处理所有这些与异步套接字的组合。在下面调用ReceiveCallback()时,如何实现NetworkStream和StreamReader类来处理消息成帧?根据我读到的内容,我可能会在一次接收中收到一封邮件的一部分,并在下一次收到邮件的其余部分(包括'\ n')。这是否意味着我可以得到一封邮件的结尾和下一封邮件的一部分?当然,必须有一个更简单的方法来处理这个问题。有关异步套接字操作和消息成帧的.NET问题
我有以下代码:
private void StartRead(Socket socket)
{
try
{
StateObject state = new StateObject();
state.AsyncSocket = socket;
socket.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (SocketException)
{
m_Socket.Shutdown(SocketShutdown.Both);
Disconnect();
}
}
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
int bytes_read = state.AsyncSocket.EndReceive(ar);
char[] chars = new char[bytes_read + 1];
System.Text.Decoder decoder = System.Text.Encoding.UTF8.GetDecoder();
int charLength = decoder.GetChars(state.Buffer, 0, bytes_read, chars, 0);
String data = new String(chars);
ParseMessage(data);
StartRead(state.AsyncSocket);
}
catch (SocketException)
{
m_Socket.Shutdown(SocketShutdown.Both);
Disconnect();
}
}
仅供参考,有作为“C#.NET”没有这样的事。该语言被命名为“C#”。 – 2011-05-19 02:31:33
谢谢你让我知道! – Andrew 2011-05-19 03:32:10