@vlad758

Как правильно передать большое байтовое значение через socket?

Как правильно передается длинная байтовая строка? Пытаюсь принять значения по 1024 байт в цикле - вылет.. Как это правильно делается?

Клиент:
def sock(self, send_vals):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((host.hostl, 8888))
        data = sock.send(send_vals.encode())
        result = sock.recv(1024)
        while result:
                result = sock.recv(1024)
        sock.close()
        return result


Сервер:
def handle(self):
        data_res = self.request.recv(1024)
        while data_res:
            data_res = self.request.recv(1024)
        data = json.loads(data_res.decode())
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
gnifajio
@gnifajio
Совершенствуюсь каждый день
Чтобы передать байтовое значение через сокет в Python, вы можете использовать метод send() у объекта сокета. Например:
import socket

# Создаем сокет
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Соединяемся с удаленным хостом
sock.connect(('remote_host', 80))

# Передаем байтовое значение
data = b'Some binary data'
sock.send(data)

# Закрываем сокет
sock.close()

Обратите внимание, что send() может передать только ограниченное количество данных за раз, поэтому если вы хотите передать большое байтовое значение, вам может понадобиться использовать несколько вызовов send(), чтобы передать все данные. Например:

import socket

# Создаем сокет
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Соединяемся с удаленным хостом
sock.connect(('remote_host', 80))

# Передаем байтовое значение по частям
data = b'Some very large binary data'
chunk_size = 1024
for i in range(0, len(data), chunk_size):
    chunk = data[i:i+chunk_size]
    sock.send(chunk)

# Закрываем сокет
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы