2013-06-29 35 views
1

有沒有更好的方式來監聽端口並讀取UDP數據?在Python中讀取UDP數據的更好方法

我做了

self.udps.bind((self.address,self.port) 
ata, addr = self.udps.recvfrom(1024) 

它似乎被鎖定在這種狀態下,直到它得到的數據,在裸露的腳本或在一個線程。

這個效果很好,但是如果你想說讓它停止收聽,它將不會收到數據,直到它意識到它需要停止收聽。我不得不每次向端口發送UDP數據,以使其正常關閉。有沒有辦法讓它立即停止收聽特定的情況?

回答

1

recfrom等待數據到達指定端口。

如果你不希望它永遠聽,設置超時:

self.udps.bind((self.address,self.port) 
self.udps.settimeout(60.0) # set 1min timeout 
while some_condition: 
    try: 
     ata, addr = self.udps.recvfrom(1024) 
    except socket.timeout: 
     pass # try again while some_condition 
    else: 
     # work with the received data ...