日期:2014-05-17  浏览次数:21233 次

C#.net , 如何让byte[]数组大小随Socket的Receive接收的信息内容大小来变化
Socket的接收信息方法Receive的参数是一个byte[]数组,用在存放收到的数据。
byte[]是一个先要定义好的一个对象且具有大小,而收到的信息事先是不知道内容的大小,如果收到的内容的大小超出了byte[]的定义,超出的部分就会失去。
如何解决这个问题,让Receive的结果给一个可变的接收对象呢
我写的代码如下:
byte[] byteMessage=new byte[1000];
try
{
socket.Listen(5);
Socket newSocket=socket.Accept();
newSocket.Receive(byteMessage);
  ...

------解决方案--------------------
常用的处理方式是

每次都去判断一下接收到的byteMessage, 如果有内容就继续执行Receive方法。这样循环就可以得到所有内容了。
------解决方案--------------------
Receive方法有返回值的吧,表示接收了多少字节,如果小于指定的长度就说明接收完了。
------解决方案--------------------
写个while循环调用Recive方法,直到Recive方法返回的值<=0,即此次Recive操作完毕。
不可能知道Recive长度的,除非你自己写的发送固定字段。