python:调用 socket.recvfrom() 两次

标签 python sockets udp

我正在编写两个 python 脚本,使用 python sockets 通过 UDP 进行通信。这是代码的相关部分

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((HOST, PORT))
s.setblocking(True) #I want it to be blocking
#(...)
(msg, addr) = sock.recvfrom(4)
#(...)
(msg2, addr2) = sock.recvfrom(2)

我希望接收是阻塞的,并且在读取第一个 4 字节部分之前我不知道整个消息的大小。上面的代码在 sock.recvrfom(2) 部分被阻塞,而修改后,使用一个 sock.recvfrom 而不是两个可以正常工作:

(msg, addr) = sock.recvfrom(6) #works ok, but isn't enough for my needs

知道如何方便地分两部分读取传入数据,或者为什么代码无法按预期工作吗?

最佳答案

socket.recvfrom(size) 将(对于 UDP 套接字)读取一个数据包,最多 size 字节。多余的数据被丢弃。如果你想接收整个数据包,你必须传递一个更大的 bufsize,然后按位处理数据包(而不是尝试按位接收它。)

如果您想要一个更方便、更灵活的网络 I/O 接口(interface),请考虑 Twisted .

关于python:调用 socket.recvfrom() 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243691/

相关文章:

python - re.compile 如何在 BeautifulSoup 中执行 find_all 函数?

python - 我正在使用 django 信号来登录用户,但我遇到错误,说 "Signal receivers must be callable."我已经制作了接收器

ruby - Ruby 中的本地信使

java - 在TFTP客户端服务器应用程序中,UDP数据报如何修改IP头?

python - Hadoop:无法使用 python 连接到 HDFS(Hadoop)

python - 为什么偶数 Ns 比奇数 Ns 花费更长的时间?

php - 如何识别客户端PHP Socket?

java - 无法让 ObjectInputStream 工作

java - 使用 Apache Mina 通过 UDP 将数据发送回客户端

c++ - UDP通信中端口和IP地址的使用