一般情况下来看,异步是否接收到数据是看bytesRead的值,代码如下
int bytesRead = socket.EndReceive(ar);
if (bytesRead > 0)
{
//......
}
else
{
//......
}
我的问题是如何判断对方是否发送完毕?因为这个涉及到我是否需要继续接收的问题。
是这样的,socket的beginreceive是采用调用回调的方式来处理,那么我想知道的是beginreceive的接收能力如何,也就是说beginreceive这个委托指向的函数(socket自己实现的)是执行完毕接收工作之后才返回呢?还是接收到微软自己限定的大小就返回???或者这样来问,当socket.EndReceive被释放阻塞的时候,bytesRead到底是这一次交互的所有内容的长度,还是这一次交互的部分长度?
MSDN中的例子是让我们使用一个结束标志符号,比如<EOF>,来判断是否发送完毕,但是如果我不使用结束标志符号的话,我能否判断是否接收完毕了?
网上有的地方说bytesRead=0就可以判断了,并且MSDN上也是这么说的,但是我觉得很疑惑,因为我从来没有发现bytesRead会有等于0的情况(小于0就不说了,异常断开什么的也不说了)。比如对方发送一个字符串“11”,那么我这边bytesRead就是2,如果这个时候,对方因为发送完毕而正常退出,那么我这边怎么办??我是处理这个呢?还是继续receive?
大家帮帮忙吧,之前发过几个帖子。。。只有2个帖子让我看到了真正的回复。。。