Python UDP客户端临时接收端口

问题描述:

我有一个多线程的python应用程序通过UDP与单独的服务进行通信。Python UDP客户端临时接收端口

每个线程都是类似的,有时需要单独服务的响应。

因此,为每个线程创建一个新的客户端套接字并开始进行通信。问题出现在服务器端,每个UDP数据包似乎都来自同一个接收端口,因此在客户端收到谁的消息时会产生问题。

如何强制套接字为同一个程序中的每个实例使用不同的临时接收端口不同的线程?

谢谢!

+0

这是在本地局域网上还是通过一些NAT机制? – 2012-03-20 15:10:58

+0

它在本地局域网上,它是一个ubuntu vmware机器,网络接口设置为“桥接”。 – sanyi 2012-03-20 16:17:47

你可以connect()每个UDP套接字对它的目标。这样,每个线程的临时端口将被固定(并且不同)。

+0

谢谢!似乎没有在实例之间随机化短暂的端口,给我一点时间来创建一个简化的测试用例,然后再试一次,以确保它不是我的错。 – sanyi 2012-03-20 15:58:12

+0

确定在windows上工作,但是在windows上工作也是无连接的(与sendto),但有趣的是知道我们实际上可以询问连接(因为UDP是无连接的,所以我在这里徘徊什么在做python)然后发送。现在我不知道我的Ubuntu机器上会发生什么,但我会稍后再检查。 – sanyi 2012-03-20 16:25:58

+1

基本上,'connect()' - UDP套接字将它限制为仅与一个目标交谈 - 一种过滤器(并且加速 - 内核绕过连接的UDP套接字的某些逻辑)。 – 2012-03-20 18:32:03