0
这是我将数据发送到客户端服务器端代码:接收无效的数据通过TCP套接字
public bool SendMessage(Socket socket, byte[] message, string logMessage = "Unknow")
{
try
{
MsgTemp msg = new MsgTemp(socket, logMessage, message);
System.Diagnostics.Trace.WriteLine(" send ---------- " + message.Length.ToString());
socket.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendCallBack), msg /* null*/);
return true;
}
catch
{
// :) removed
}
return false;
}
这个代码是接收客户端回调方法:
private void ReceiverCallBack(IAsyncResult ar)
{
try
{
int size = _socket.EndReceive(ar);
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiverCallBack), null);
System.Diagnostics.Trace.WriteLine(" received ---------- " + size.ToString());
// messagereceived is an event
if (MessageReceived != null)
{
byte[] temp = new byte[size];
Array.Copy(_buffer, temp, size);
MessageReceived(temp);
}
}
catch (Exception exp)
{
// :) removed
}
}
当服务器发送多个包客户端数据无效。 (在正常/低交易正确工作)
看到这个(字节被服务器之间发送的客户端在会话中):
send ---------- 496
received ---------- 496
send ---------- 613
received ---------- 613
send ---------- 680
received ---------- 680
send ---------- 227
send ---------- 697
received ---------- 227
send ---------- 722
send ---------- 710
received ---------- 697
received ---------- 1432
最后两个包被发送到在一个封装接收到的客户端 - > 722 + 710 = 1432 且数据无效/不可用...
为什么?谢谢
你的解决方案是,首先发送消息的大小必须由客户端接收然后发送数据/字节? – warrior
@warrior我不喜欢提供粘贴就绪的解决方案,但是如果你问我,这是最好的方法。我发布的博客链接包含一个示例链接:http://blog.stephencleary.com/2009/04/sample-code-length-prefix-message.html –
谢谢,那篇文章非常好,他也有同样的问题。 – warrior