日期:2014-05-16  浏览次数:20788 次

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条甚至更多消息。
------解决方案--------------------
引用:
错误找到了 
private byte[] MsgBuffer=new byte[1024];//存放消息数据
由于MsgBuffer定义了1024长度 所以msg的长度也是1024 
但还是不知道怎么改、、、、


在回调里:
byte[] MsgBuffer=new byte[这里就是回调里面返回的长度];//存放消息数据