Я отправляю две строки с сервера, и мой хост читает обе строки как одну. Как я могу решить эту проблему? - PullRequest
0 голосов
/ 05 июля 2019

Мой сервер постоянно отправляет строку на мой хост String1 = '{a:1, b:2}' и String2 = '{a:4, b:5}'

import socket

HOST = '127.0.0.1'  
PORT = 65432        

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

Но мой хост получает две строки как одну строку {a:1, b:2}{a:4, b:5}


import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    while True:
        data = s.recv(1024)

Я не хочу терять данные, и я не могу пойти на компромисс со скоростью. Пожалуйста, предложите некоторые решения.

Заранее спасибо

1 Ответ

1 голос
/ 06 июля 2019

Если вы записали две строки в файл и передали его кому-то, как они узнали бы, где заканчивается первая строка и начинается следующая строка?Вот так работают и сокеты.

Вы должны буферизовать ваши данные и реализовать метод извлечения отдельных строк.Это можно сделать, отправив сначала байт, указывающий размер строки, или разделив их символом, который не появится в строке (ноль, символ новой строки и т. Д.).

См. thisответ за другое решение.

...