Python - сокеты tcp, создающие функцию catch all для получения данных - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь написать функцию, которую можно использовать повторно для надежного получения любого количества данных 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, который может быть декодирован с помощью result.decode("utf-8") вне функции.

EDIT2: Дополнительные пояснения - Я в основном ищу.join(), работающий со списком байтов.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я обнаружил, что могу использовать b"".join(list_name), чтобы объединить список байтов вместе

0 голосов
/ 01 октября 2018

Это будет работать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...