我在编写udp套接字接收器程序时遇到麻烦。
我不控制传输源(仅在启动时)-使用udp_source.start_transmission()
。
我也在使用Wireshark监视网络流量。
根据Wireshark-我得到了所有数据。例如:源在udp数据包中发送60000000字节。
但是,在Python中,程序在大约3/4的数据后挂在tmp = sock.recvfrom(1500)
处。
例如:没有达到while循环的停止条件。
sock = socket.socket(family=socket.AF_INET,
type=socket.SOCK_DGRAM, proto=socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 512 * 1024)
sock.connect((ip, port))
udp_source.start_transmission()
cntr = 0
l = []
total_size = 60000000
rec_bytes_len = 0
while rec_bytes_len < total_size:
r, w, e = select.select([sock], [], [sock], 60)
if r:
tmp = sock.recvfrom(1500)
rec_bytes_len += len(tmp)
cntr += 1
if cntr % 1000 == 0:
print(cntr)
我尝试过:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024 * 512 * 1024)
-相同的行为sock.settimeout(60)
-相同的行为有人可以帮忙吗?
谢谢。
EDIT
设法使其起作用。 原来我没有增加足够的缓冲区。 一旦我使缓冲区很大(1 GB),我就可以通过所有数据。 不知道为什么会这样,但是确实有。