如何使用python套接字从广播服务器接收大数据

时间:2017-06-05 06:31:36

标签: python-2.7 sockets

我需要从广播服务器接收实时数据,这样做时,处理数据的某些部分会丢失。这是我尝试过的代码:

import socket
import sys
from pymongo import MongoClient

def process():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Connect the socket
    server_address = ('ip', port)
    print('connecting to %s port %s' % server_address)
    sock.connect(server_address)

    try:
        # Look for the response

        while True:
              data = sock.recv(16384000)
              #print(data)
              if not data:
                 pass
              else:
                  print data
    except socket.error, ex:
        print('closing socket')
        sock.close()
        time.sleep(1)
        process()
        #def fun(data):
        #print data[0]

我不明白如何验证我是否收到了完整的数据而没有任何数据丢失。请帮我解决这个问题。我是python socket编程的新手。

1 个答案:

答案 0 :(得分:0)

接收电话通常会返回任何可用的数据,直至请求的金额,而不是等待收到所请求的全部金额。如果要确保收到准确的16384000字节数据,则必须自己实现。 TCP doesn't preserve message boundaries。所以你真的想要这样的东西:

def recvall(sock, length):
    data = b''
    while length:
        recved = sock.recv(length)
        data += recved
        length -= len(recved)
    return data

请注意,此代码尚未经过测试;它也不是非阻塞套接字的选项。