我有一个.NET 4.0应用程序,它使用TCP和UDP与服务器通信。
客户端首先使用TCP连接连接到服务器,然后通过一些UDP数据包交换一些信息。
UDP交换由服务器发起,服务器将数据包发送到客户端。客户端接收数据包并通过UDP响应服务器。
有时,服务器没有收到回复。如果我重新编译应用程序以定位.NET 2.0框架,则服务器始终会收到该数据包。
总结一下:
当客户端针对4.0框架进行编译时,服务器无法定期收到数据包。
当客户端针对2.0框架进行编译时,服务器始终会收到该数据包。
此行为在XP,Vista和Windows 7上保持一致。
我知道UDP不保证数据包传输,不幸的是我无法控制此协议,所以我无法切换到TCP。
我也知道,如果需要刷新ARP缓存,Windows有时会丢弃UDP数据包,但为什么这种情况与4.0一致而不是2.0?
我已经看过Reflector中Socket.Send方法的4.0和2.0实现,它们看起来完全相同。