Python-TCP套接字,创建一个catch all函数来接收数据

时间:2018-10-01 19:12:32

标签: python sockets tcp

我正在尝试编写一个可复用以可靠地接收任意数量tcp数据的函数。

注意,这假设已经建立了连接-其中conn是我连接的套接字。

到目前为止,我有以下内容:

import socket

def recv_tcp_data(conn, byte_size):
    chunks = []
    while True:
        data = conn.recv(byte_size)
        if data:
            chunks.append(data)
        else:
            break
    return chunks as result

上述代码的问题是我不想返回已接收到的数据的列表。我想将其全部作为一个编码字符串返回,而不考虑缓冲区的数量,但是我不知道如何将chunks编码字符串列表连接在一起。

例如,我希望能够直接在函数的输出上运行.decode("utf-8"),而不必在函数外部操作函数输出。

编辑:为了澄清-我正在尝试创建一个函数来接收编码数据的缓冲区,然后将这些缓冲区作为一个可编码的result返回,可以使用{{1}进行解码}。

EDIT2:更多说明-我基本上是在寻找适用于字节列表的result.decode("utf-8")

2 个答案:

答案 0 :(得分:0)

这将有效b''.join(chunks)

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 1234

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr


def recv_tcp_data(conn, byte_size):
    chunks = []
    while True:
        data = conn.recv(byte_size)
        if data:
            chunks.append(data)
        else:
            break
    return b''.join(chunks)


print recv_tcp_data(conn, 20)
conn.close()

答案 1 :(得分:0)

我发现我可以使用b"".join(list_name)将字节列表连接在一起