情况:
我有一个发送套接字,它绑定到本地主机UDP端口33100。 我有一个接收套接字,它绑定到本地主机UDP端口33101。
发送套接字发送4500字节的数据(字符串“hello man” * 500)。在接收端,我有一个epoll对象,它等待receiversocket上的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个字节的数据。