C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从C#udp套接字异常正常恢复大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
上下文:我将 linux perl应用程序移植到C#,服务器在udp端口上侦听,并通过一个udp套接字与远程客户端维护多个并发对话.在测试期间,我发送大量的数据包到udp服务器,随机重新启动客户端观察服务器注册新的连接.问题是这样的:当我杀死一个udp客户端时,可能仍然存在着该客户端的服务器上的数据.当服务器尝试发送此数据时,它会返回icmp“no service available”消息,因此套接字上发生异常. @H_618_2@我不能重用这个套接字,当我尝试将C#异步处理程序与套接字相关联时,它抱怨异常,所以我必须关闭并重新打开服务器端口上的udp套接字.这是解决这个问题的唯一方法吗?确实有一些“修复”udp套接字的方法,从技术上讲,UDP套接字不应该知道远程套接字的状态?

@H_618_2@任何帮助或指针将不胜感激.谢谢.

解决方法

我想你是对的说:’服务器不应该知道’.如果您将uDP数据包发送到某些可能打开或可能不会打开的IP /端口,则无法知道服务器到达目的地址. @H_618_2@服务器知道的唯一方法是让客户端发回ACK. (客户端和服务器也必须在丢失包的情况下重新发送机制).

@H_618_2@所以很明显你的代码还有一些事情(或者.Net udp实现)

@H_618_2@编辑:

@H_618_2@在Nikolai的评论之后,我检查了文档.在使用UDP时,在.Net中有一个区别,即“连接”或“无连接”.

@H_618_2@如果你使用这样的代码

UdpClient udpClient = new UdpClient(11000); //sourceport
try{
     udpClient.Connect("www.contoso.com",11000); //'connect' to destmachine and port
     // Sends a message to the host to which you have connected.
     Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
     udpClient.Send(sendBytes,sendBytes.Length);
@H_618_2@那么显然你是’连接’

@H_618_2@但是,如果使用如下代码

UdpClient udpClientB = new UdpClient();
     udpClientB.Send(sendBytes,sendBytes.Length,"AlternateHostMachinename",11000);
@H_618_2@那么你可以发送给任何你选择没有’连接’.

@H_618_2@我不知道你的代码是什么样的,但是可能值得检查一下使用正确的一组命令,这些命令不会假定“连接”

大佬总结

以上是大佬教程为你收集整理的如何从C#udp套接字异常正常恢复全部内容,希望文章能够帮你解决如何从C#udp套接字异常正常恢复所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。