【发布时间】:2011-04-11 16:40:24
【问题描述】:
我正在尝试从一个套接字向另一个套接字发送多个不同的对象(嗯,它们是相同的对象类型,只是具有不同的值)。我可以使用以下代码发送一个对象:
客户:
var buffer = new byte[1024];
var binFormatter = new BinaryFormatter();
using (var ms = new MemoryStream())
{
int bytesRead;
while ((bytesRead = _clientReceive.Receive(buffer)) > 0);
{
ms.Write(buffer, 0, bytesRead);
}
ms.Position = 0;
message = (Message)binFormatter.Deserialize(ms);
}
服务器:
var gm = new Message { Message = "ObjectType", Object = Data };
using (var mem = new MemoryStream())
{
var binFormatter = new BinaryFormatter();
binFormatter.Serialize(mem, gm);
var gmData = mem.ToArray();
client.Send(gmData, gmData.Length, SocketFlags.None);
client.Close();
}
但是如果我想发送多条消息(将完整的客户端代码放在一个循环中,而不是调用client.Close()),我将如何确定客户端何时接收到完整的对象?将客户端代码放在这样的循环中:
while (_isReceivingStarted)
{
var buffer = new byte[1024];
var binFormatter = new BinaryFormatter();
using (var ms = new MemoryStream())
{
int bytesRead;
while ((bytesRead = _clientReceive.Receive(buffer)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
ms.Position = 0;
message = (Message) binFormatter.Deserialize(ms);
}
// Do stuff then wait for new message
}
客户端将在_clientReceive.Receive(buffer) 挂起,因为它没有收到来自客户端的 Close() 并且永远不会收到 0 接收字节。如果我关闭服务器上的连接,它将循环通过,然后在 Deserialize MemoryStream 处出错,而不是在_clientReceive.Receive(buffer) 处阻塞以等待另一个对象被发送。
我希望这是有道理的。有什么指点吗?
【问题讨论】:
标签: c# sockets serialization