Сокет Python отправляет первое сообщение, но потом ничего - PullRequest
0 голосов
/ 22 октября 2018

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

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 Ответ

0 голосов
/ 22 октября 2018

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

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

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

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

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