2014-09-10 29 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',意思是“所有主机的接口”)。