我正在发送一条消息,该消息基本上是从服务器到客户端的序列化为 xml 对象(SerializedXMLMessageObject)。
我正在尝试阅读整个消息并将其累积到 MemoryStream 中,然后才能对其进行反序列化。我遇到的问题是它永远不会进入下面这个 if-else 的“else”部分。读完后,它会跳到 else 语句的末尾括号。
两个问题:
如何从套接字读取整个消息并保持与服务器的连接?有没有一种简单的方法来修复下面的代码,还是我必须提供某种分隔符?
在哪里可以找到通过 C# 中的套接字发送 xml 序列化对象的示例?我遇到的每个例子都展示了如何发送一个简单的字符串。
编辑 1:期望连接保持打开状态。即客户端保持连接到服务器。
private void callback(IAsyncResult result)
{
byte[] data = (byte[])result.AsyncState;
try
{
int read = socket.EndReceive(result);
if (read > 0)
{
_memoryStream.Write(data, 0, read);
socket.BeginReceive(data, 0, 255, SocketFlags.None, new AsyncCallback(callback), data);
}
else
{
SerializedXMLMessageObject msg = DeserializeFromXml<SerializedXMLMessageObject >(_memoryStream.ToArray());
}
}
catch (ObjectDisposedException)
{
socket.Close();
}
}