无法在同一程序中发送和接收UDP消息

1 投票
1 回答
761 浏览
提问于 2025-04-20 23:05

我可以在不同的程序中发送和接收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

1 个回答

1

在你的例子中,你试图在发送数据后绑定套接字地址,这样做是错误的。地址只能在任何数据传输之前绑定到套接字。

如果没有明确绑定,操作系统会在第一次调用 .send()/.recv() 时自动设置一个范围在 [1024, 65535] 之间的空闲(未使用)端口号。

之后,套接字只能绑定到一个单独的IP地址(除了特殊情况 '0.0.0.0',它表示“所有主机的接口”)。

撰写回答