Python-сокет отправляет первое сообщение, но потом ничего

Мой сокет отправляет первое сообщение, но потом ничего.
Вывод на сервер:

What do you want to send?

lol

Клиент получает:

From localhost got message:

lol

И тогда он не хочет отправлять что-либо еще. Я не понимаю what do you want to send печатается больше.

Мой код:

server.py файл:

#!/usr/bin/python3
import socket

# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name
host = socket.gethostname()
print ("got host name:", host)

port = 9996
print("connecting on port:", port)

# bind to the port
serversocket.bind((host, port))
print("binding host and port")

# queue up to 5 requests
serversocket.listen(5)
print("Waiting for connection")

while True:
    clientsocket, addr = serversocket.accept()
    msg = input("what do you want to send?\n")
    clientsocket.send(msg.encode('ascii'))

client.py файл:

#!/usr/bin/python3
import socket # create a socket object

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # get local machine

# name
host = socket.gethostname()
port = 9996 # connection to hostname on the port.

s.connect((host, port)) # Receive no more than 1024 bytes

while True:
    msg = s.recv(1024)
    print(msg.decode("ascii"))

1 ответ

Клиент подключается только один раз (ОК), но сервер ожидает входящего соединения при каждом запуске while петля.

Поскольку клиент больше не запрашивает подключения, сервер останавливается на второй итерации.

Если вы просто хотите работать с одним клиентом, переместите clientsocket, addr = serversocket.accept() перед while петля. Если вы хотите работать с несколькими клиентами, стандартный способ - сервер принимает соединения внутри while цикл и порождение потока для каждого клиента.

Вы также можете использовать сопрограммы, но это может быть немного излишним, если вы только начинаете.

Другие вопросы по тегам