2012-03-20 116 views
1

我有一個多線程的python應用程序通過UDP與單獨的服務進行通信。Python UDP客戶端臨時接收端口

每個線程都是類似的,有時需要單獨服務的響應。

因此,爲每個線程創建一個新的客戶端套接字並開始進行通信。問題出現在服務器端,每個UDP數據包似乎都來自同一個接收端口,因此在客戶端收到誰的消息時會產生問題。

如何強制套接字爲同一個程序中的每個實例使用不同的臨時接收端口不同的線程?

謝謝!

+0

這是在本地局域網上還是通過一些NAT機制? – 2012-03-20 15:10:58

+0

它在本地局域網上,它是一個ubuntu vmware機器,網絡接口設置爲「橋接」。 – sanyi 2012-03-20 16:17:47

回答

2

你可以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