Python挂在套接字接收上,而Wireshark显示所有收到的消息

时间:2018-10-18 14:37:43

标签: python sockets udp python-3.6 hang

我在编写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)  

我尝试过:

  1. 增加接收器缓冲区: sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024 * 512 * 1024)-相同的行为
  2. 添加大量超时sock.settimeout(60)-相同的行为
  3. 解除套接字的阻塞-无法立即完成非阻塞套接字操作异常

有人可以帮忙吗?

谢谢。

EDIT

设法使其起作用。 原来我没有增加足够的缓冲区。 一旦我使缓冲区很大(1 GB),我就可以通过所有数据。 不知道为什么会这样,但是确实有。

0 个答案:

没有答案