2024-10-02 20:32:26 发布
网友
问题是我不知道从socket接收多少字节,所以我只是尝试循环。
buffer = '' while True: data, addr = sock.recvfrom(1024) buffer += data print buffer
据我所知,recvfrom只返回指定大小的字节并丢弃其他数据,是否有可能以某种方式将此数据连续读取到缓冲区变量?
recvfrom
我建议使用readline作为缓冲区,并使用“\n”作为行之间的分隔符:
#read one line from the socket def buffered_readLine(socket): line = "" while True: part = socket.recv(1) if part != "\n": line+=part elif part == "\n": break return line
当您希望在不关闭套接字的情况下缓冲时,这很有帮助。
当没有数据发送时,sock.recv(1024)将挂起,除非您关闭另一端的套接字。
它不会丢弃数据,只会在下一次迭代中返回数据。你在代码中所做的是完全正确的。
我唯一想改变的是一个打破循环的条款:
buffer = '' while True: data, addr = sock.recv(1024) if data: buffer += data print buffer else: break
空字符串表示连接已根据documentation断开
如果此代码仍然不起作用,那么最好向我们展示如何设置套接字。
我建议使用readline作为缓冲区,并使用“\n”作为行之间的分隔符:
当您希望在不关闭套接字的情况下缓冲时,这很有帮助。
当没有数据发送时,sock.recv(1024)将挂起,除非您关闭另一端的套接字。
它不会丢弃数据,只会在下一次迭代中返回数据。你在代码中所做的是完全正确的。
我唯一想改变的是一个打破循环的条款:
空字符串表示连接已根据documentation断开
如果此代码仍然不起作用,那么最好向我们展示如何设置套接字。
相关问题 更多 >
编程相关推荐