另一个窃取我的UDP数据包的过程

时间:2012-09-14 11:25:32

标签: udp

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

或者更糟糕的是,如果客户端将UDP消息发送到服务器,那么它将为它们分配要连接的TCP端口。服务器仍然必须连接到客户端知道的常量UDP端口X,即使它正在使用中,否则没有人能够连接到它。

我该如何预防?

2 个答案:

答案 0 :(得分:2)

要共享端口的所有进程都必须设置SO_REUSEADDR。如果他们不这样做,第一个绑定到端口获取它而其他绑定失败。因此,(a)不设置SO_REUSEADDR,并且(b)是第一个绑定到端口的。如果您不是第一个,则会出现绑定错误。

答案 1 :(得分:1)

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

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