UdpClient.BeginReceive的困惑,求帮助。

binfen088 2017-07-09 09:47:14
myUdp.BeginReceive(new AsyncCallback(ReceiveCallback), recS);

public void ReceiveCallback(IAsyncResult iar)
{
UdpState udpState = iar.AsyncState as UdpState;
if (iar.IsCompleted)
{
Sleep(10000);
。。。。。
myUdp.BeginReceive(new AsyncCallback(ReceiveCallback), recS);
}
}

接收端在回调函数中故意sleep10秒钟,发送端每隔两秒发送一次。服务器竟然不会漏收消息,而且关闭发送端,接收端仍然能够继续收到消息,直到接收完发送端发送的全部消息。不明白这是为什么,求大神解惑,万分感激!
...全文
371 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2017-07-17
  • 打赏
  • 举报
回复
引用 3 楼 binfen088 的回复:
我的理解是收到的消息应该是最新的消息,因为前面的消息已经被覆盖了,同一个端口只能保存最后一条吧? 如果消息不会被覆盖,那这些消息在我接收之前,在端口中是如何存在的呢?
socket收发是有缓冲区的,你的recieve和send操作是这篇缓冲区,也就是在recieve的缓冲区被填满之前,是不会覆盖之前的消息的
binfen088 2017-07-16
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
本来就能正确接收消息,为什么你会认为漏接才是正确行为
我的理解是收到的消息应该是最新的消息,因为前面的消息已经被覆盖了,同一个端口只能保存最后一条吧? 如果消息不会被覆盖,那这些消息在我接收之前,在端口中是如何存在的呢?
binfen088 2017-07-16
  • 打赏
  • 举报
回复
我的理解是收到的消息应该是最新的消息,因为前面的消息已经被覆盖了,同一个端口只能保存最后一条吧? 如果消息不会被覆盖,那这些消息在我接收之前,在端口中是如何存在的呢?
xdashewan 2017-07-10
  • 打赏
  • 举报
回复
本来就能正确接收消息,为什么你会认为漏接才是正确行为

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧