情况:
我有一个绑定到 localhost UDP 端口 33100 的 sendersocket。我有一个绑定到 localhost UDP 端口 33101 的 receiversocket 套接字。
发送方套接字发送 4500 字节的数据(字符串“hello man”* 500)。在接收方,我有一个 epoll 对象,它等待接收方套接字上的 EPOLLIN 事件。当有活动时,我会:
while True:
msg_received = receiver_socket.recv(128)
if msg_received.decode("UTF-8") == "":
break
else:
print msg_received.decode("UTF-8")
问题:
主要问题是在读取了前 128 个字节的数据后,我无法再次读取。发送方说它按预期发送了 4500 字节的数据。
如果发送方再次发送相同的 4500 字节数据,则再次注册 EPOLLIN 事件并读取新字符串。不知何故,缓冲区在我第一次阅读后被清除。
现在即使发件人刚刚给我发送了 4500 字节的数据,第一个recv
给了我 128 字节的数据,然后什么都没有recv
。
我可能正在做一些非常愚蠢的事情,所以请赐教。我想接收所有 4500 字节的数据。