2014-09-10 73 views
1

我能夠在單獨的程序中發送和接收UDP消息,但我無法在一個程序中執行相同的任務。無法在同一個程序中發送和接收udp消息

import socket 

UDP_IP = "192.168.1.178" 
UDP_PORT = 8888 
msg = 'test' 

print "UDP target IP: ", UDP_IP 
print "UDP target PORT: ", UDP_PORT 
print "Message: ", msg 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.sendto(msg, (UDP_IP, UDP_PORT)) 


UDP_IP2 = "192.168.1.198" 

sock.bind((UDP_IP2, UDP_PORT)) 

while True: 
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
    print "received message:", data 

有了這個程序,我可以發送UDP信息,但是,我無法從其他機器收到任何消息。

我在做什麼錯?

由於提前,
的Mikkel

+0

你可能需要一些事件循環調用[poll(2)](http://man7.org/linux/man-pages/man2/poll.2.html) – 2014-09-10 20:21:38

回答

1

在你的榜樣,你嘗試發送後插座地址綁定,什麼是錯的。 地址只能綁定到套接字之前的任何數據傳輸。

如果沒有顯式綁定操作系統在第一個.send()/.recv()調用上設置任何空閒(未使用)端口號範圍[1024,65535]。

接下來,套接字只能綁定到單個IP(除了特殊情況'0.0.0.0',意思是「所有主機的接口」)。