我正在尝试编写一个可复用以可靠地接收任意数量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")
。
答案 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)
将字节列表连接在一起