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