Как проверить, получены ли байты от клиента? - PullRequest
0 голосов
/ 29 марта 2020

Я создаю интерфейс чата, и в настоящее время сервер должен сначала отправить сообщение, чтобы чат работал.

Если клиент сначала отправляет сообщение, то сервер не сможет увидеть сообщение, пока сервер не отправит сообщение клиенту.

Мой вопрос:

  1. Как я могу проверить, отправил ли мне клиент что-нибудь? Тогда я могу просто распечатать его.

Вот код сервера:


serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(("", 8080))
serv.listen(5)
while True:
    c, addr = serv.accept()

    print("Connection recieved from", addr)
    while True:
        strig = str(input("Enter your message to the client: "))
        c.send(strig.encode())

        thing = c.recv(1024)
        message = list(str(thing))
        message.remove("b")
        printable = ""

        for item in message:
            printable += item
        print(printable)

        strig = str(input("Enter your message to the client: "))
        c.send(strig.encode())

        thing = c.recv(1024)
        message = list(str(thing))
        message.remove("b")
        printable = ""

        for item in message:
            printable += item
        print(printable)

А вот код клиента:

from time import sleep
s = socket.socket()

port = 8080

s.connect(("10.0.0.92", port))
while True:
    thing = str(s.recv(1024))
    message = list(thing)
    message.remove("b")
    #message.remove("/")
    printable = ""
    for item in message:
        printable += item
    print(printable)

    your = str(input("Enter your message to the server: "))
    s.send(your.encode())

    thing = str(s.recv(1024))
    message = list(thing)
    message.remove("b")
    #message.remove("/")
    printable = ""
    for item in message:
        printable += item
    print(printable)

    your = str(input("Enter your message to the server: "))
    s.send(your.encode())

Спасибо в заранее !!

ps Я хочу, чтобы один человек был сервером, а другой - клиентом. Пожалуйста, не говорите мне, чтобы оба клиента стали клиентами.

1 Ответ

0 голосов
/ 29 марта 2020

Ваш сервер однопоточный. input ожидает ввода, поэтому никогда не доберется до recv без ввода пользователя. Создайте поток для чтения входных данных клиента и поток для запроса и отправки сообщений. Вам понадобится нечто подобное на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...