Arrays 使用套接字发送列表

Arrays 使用套接字发送列表,arrays,python-2.7,csv,sockets,stream,Arrays,Python 2.7,Csv,Sockets,Stream,我正在尝试将列表从服务器发送到客户端。 列表如下所示(它是一个csv文件) 但在发送时,我收到以下错误: TypeError:必须是字符串或缓冲区,而不是list 我尝试了两种选择: 迭代列表并将每个字符串发送到服务器,但结果是: 201--->2,0,1 尝试铸造每一行,例如str(line),然后发送,但得到以下结果: 201,80040000080--->[,',2,0,1',,,,,,,,,,,,,,,,,,,0,0,4,0,0,0,0,0,8,0',] 我怎样才能解决这个问题?我只想按

我正在尝试将列表从服务器发送到客户端。 列表如下所示(它是一个csv文件)

但在发送时,我收到以下错误:

TypeError:必须是字符串或缓冲区,而不是lis
t

我尝试了两种选择:

  • 迭代列表并将每个字符串发送到服务器,但结果是:

    201--->2,0,1

  • 尝试铸造每一行,例如str(line),然后发送,但得到以下结果:

    201,80040000080--->[,',2,0,1',,,,,,,,,,,,,,,,,,,0,0,4,0,0,0,0,0,8,0',]

  • 我怎样才能解决这个问题?我只想按原样将数据从客户端发送到服务器。作为记录,客户机代码:

        import socket
        import csv
    
        clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
        with open('can_data.csv', 'rb') as csv_file:
            csv_reader = csv.reader(csv_file)
            for line in csv_reader:
                    clientSock.sendto(str(line), (self.address, self.port))
    
    服务器代码:

          with open('output.csv', 'wb') as new_file:
            csv_writer = csv.writer(new_file)
    
            while True:
                data, addr = s.recvfrom(1024)
                csv_writer.writerow(data)
    

    双方需要就序列化格式达成一致
    str(line)
    在与
    ast.literaleval()
    配对时可能会起作用,但是
    repr(line)
    将是更好的选择,因为
    repr
    尝试更精确地表示
    str
    。您还可以使用类似于
    pickle
    json
    的序列化协议

    假设这是Python3,我还将csv移动到文本,并在线路上使用utf-8编码

    客户:

    import socket
    import csv
    
    address = 'localhost'
    port = 5555
    
    clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    with open('can_data.csv', 'r') as csv_file:
        csv_reader = csv.reader(csv_file)
        for line in csv_reader:
            clientSock.sendto(repr(line).encode('utf-8'), (address, port))
    
    服务器:

    import socket
    import csv
    import ast
    
    address = 'localhost'
    port = 5555
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((address, port))
    
    with open('output.csv', 'w') as new_file:
        csv_writer = csv.writer(new_file)
    
        while True:
            data, addr = sock.recvfrom(1024)
            csv_writer.writerow(ast.literal_eval(data.decode('utf-8')))
    

    您的数据需要以某种方式序列化
    pickle
    json
    是两个很好的选择。或者,在处理之前发送csv文本文件。可能重复的我有一个问题,服务器没有写入所有行。原始文件有65000行,输出约有35000行,是什么导致此问题?
    import socket
    import csv
    import ast
    
    address = 'localhost'
    port = 5555
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind((address, port))
    
    with open('output.csv', 'w') as new_file:
        csv_writer = csv.writer(new_file)
    
        while True:
            data, addr = sock.recvfrom(1024)
            csv_writer.writerow(ast.literal_eval(data.decode('utf-8')))