MSDN 中关于 EndReceive 的解释是:
如果您使用的是面向连接的协议,则 EndReceive 方法将读取所有可用的数据,直到达到 BeginReceive 方法的 size 参数所指定的字节数为止。 如果我发送的数据小于 BeginReceive 方法中指定的 size , 那么Socket 此时是怎么读取的?
解决方案 »
- 多个线程同时对一个变量进行++操作是不是安全的?(不-)
- 如何修改 iis7 applicationhost.config的lcoation节点,在线等
- 关于 判别 和 物体反弹(C#小游戏)
- DataGridView的点击列头事件
- ImportRow为什么没有值?
- 做.net学c++有什么用
- 如何给第三方组件加强名称.我安装Framework SDK后怎么找不到tblimp.exe,请问在哪?
- 请教SOAP的研究
- 很菜的问题,怎样把Button按钮的AccessKey设为回车键(Web页中)!!!
- 关于递增运算的问题,不解,特来请教
- 请教ASP.NET之中,对象Session和Request对象有什么区别?谢谢!
- 高手指教:SqlBulkCopy 如何导入到临时表
消息类型-消息长度-消息本身
这样,你在取数据的时候,就可以取到很确切的消息长度,接收方根据这个长度去获取消息本身就行。
如下代码段:
recv = _currentSocket.Receive(dataType, 0, 4, 0);
if (recv == 0)
throw new Exception("receive dataType broken.");
recv = _currentSocket.Receive(datasize, 0, 4, 0);
if (recv == 0)
throw new Exception("receive dataSize broken.");
int size = BitConverter.ToInt32(datasize, 0);
int dataleft = size; byte[] data = null;
if (Encoding.ASCII.GetString(dataType, 0, recv) == "data")
{
data = new byte[size];
while (total < size)
{
recv = _currentSocket.Receive(data, total, dataleft, 0);
if (recv == 0)
throw new Exception("receive data broken.");
total += recv;
dataleft -= recv;
}
total = 0;
dataleft = 0;
_receivedData(_connectIndex, Encoding.ASCII.GetString(data));
Debug.Print("data = " + Encoding.ASCII.GetString(data));
}
先获取dataType,再获取datasize,继而获取data本身,具体参考下面的博文本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luminji/archive/2008/12/25/3606072.aspx