Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
另一个进程正在窃取我的UDP数据包_Udp - Fatal编程技术网

另一个进程正在窃取我的UDP数据包

另一个进程正在窃取我的UDP数据包,udp,Udp,不久前我遇到了这个问题,最近的一次讨论提醒我,我不知道如何解决它…… 假设您有一个通过UDP进行通信的服务器和客户端。 您的客户端侦听UDP端口X并接收服务器数据包。 然后启动第三方进程,它也在侦听UDP端口X。 现在它可能读取我的客户机要接收的数据包,并将它们从队列中删除,而我的客户机根本不会接收它们 甚至更糟糕的是,如果客户端向服务器发送UDP消息,那么服务器将为其分配TCP端口以进行连接。服务器仍然必须连接到客户端知道的固定UDP端口X,即使它正在使用,否则没有人能够连接到它 如何防止它?

不久前我遇到了这个问题,最近的一次讨论提醒我,我不知道如何解决它……
假设您有一个通过UDP进行通信的服务器和客户端。
您的客户端侦听UDP端口X并接收服务器数据包。
然后启动第三方进程,它也在侦听UDP端口X。
现在它可能读取我的客户机要接收的数据包,并将它们从队列中删除,而我的客户机根本不会接收它们

甚至更糟糕的是,如果客户端向服务器发送UDP消息,那么服务器将为其分配TCP端口以进行连接。服务器仍然必须连接到客户端知道的固定UDP端口X,即使它正在使用,否则没有人能够连接到它


如何防止它?

只有单播UDP数据包可以被“窃取”,实际发生的情况是IP堆栈将只传送到第一个绑定的应用程序


解决方案是管理性的:成为第一个执行绑定到所需端口的应用程序。

所有要共享端口的进程都必须设置为SO\u REUSEADDR。如果没有,则第一个绑定到端口的将获得该端口,而其他端口将失败。因此,(a)不要设置So_REUSEADDR,(b)首先绑定到端口。如果您不是第一个,您将得到一个绑定错误。

根据这里的答案(),只有当两个应用程序都以允许的方式写入时,才能连接到同一端口……好的,很好。假设客户端向服务器发送UDP消息,以便服务器为其分配TCP端口以连接。无论是否正在使用,它仍然必须连接到UDP端口X。更糟糕的是,它会使服务器瘫痪。要么你没有仔细阅读链接问题中的答案,要么我根本不理解你的问题……我的服务器从客户端接收UDP消息。它向他们发送一个TCP端口号,以便他们连接并使用该TCP端口进行通信。我的服务器必须能够侦听其他人正在侦听的UDP端口,否则如果有人正在侦听该端口,服务器将无法接收来自客户端的消息。现在,如果另一个进程也开始侦听该端口,它可能会收到我的消息,而不是我的消息;但是,为什么您的服务器需要侦听其他人正在侦听的UDP端口?好的,但我需要确保我是第一个绑定到该端口的人?我不知道,但是如果您不是第一个,您将得到一个绑定错误,所以您会知道。