Socket编程 接收数据问题
ClientSocket[ClientNumb].Receive(MsgBuffer);
msg = System.Text.Encoding.UTF8.GetString(MsgBuffer);
MessageBox.Show(msg);
if (msg =="aa%%aa")
{
MessageBox.Show("true");
sendmsg = "true";
arraytosend = System.Text.Encoding.UTF8.GetBytes(sendmsg.ToCharArray();
}
else
{
MessageBox.Show("false");
sendmsg = "false";
arraytosend = System.Text.Encoding.UTF8.GetBytes(sendmsg.ToCharArray());
}
ClientSocket[ClientNumb].Send(arraytosend);
上面是我服务器端接收数据,然后进行比较。
如果等于“aa%%aa” 则发送给客户端 true
否则就返回 false
在MesseageBox.Show(msg);中显示的msg的值就是“aa%%aa”
但是if语句中显示是false(即msg!=“aa%%aa”)
------解决方案--------------------你的这个可能对于那种培训班里的“体验”式小程序,也许“足够了”。
告诉你一下,实际的应用程序不是这样的。实际的程序,你无法保证应该Receive的字节的长度恰好不大于Buffer的大小。因此你需要连续Receive,然后将收到的结果写到 List<byte> 或者 MemoryStream 或者其它类似结构的对象中。然后等Receive到的信息(的结束位置)恰好是一块数据的结束,这时候可以把收到的完整的数据(多次Receive得到的字节的总和)进行解析,查看其包括几条消息?!然后逐一处理每一条消息。
一次Receive的结果,可能不足以包括一条消息,也可能粘包有2条甚至更多消息。
------解决方案--------------------
在回调里:
byte[] MsgBuffer=new byte[这里就是回调里面返回的长度];//存放消息数据