#python #sockets
Вопрос:
Я создал сервер и клиент для подключения. вот код сервера
import socket s = socket.socket() print("Socket has been created") s.bind(('localhost',9998)) s.listen(3) print('Waiting for connections') while True: c, addr = s.accept() age = s.accept() name = c.recv(1024).decode() age = c.recv(1024).decode() print("Connected with ",addr, name, age) c.send(bytes('Welcome to server 2', 'utf-8')) c.close()
вот код клиента
import socket c = socket.socket() c.connect(('localhost',9998)) name = input("Enter a name") age = input("Enter your age") c.send(bytes(name,'utf-8')) c.send(bytes(age, 'utf-8')) print(c.recv(1024).decode())
он не отправляет сообщение «Добро пожаловать на сервер» клиенту и не печатает IP имя возраст в консоли сервера . Что я делаю не так?
Комментарии:
1. Ваш сервер звонит
.accept()
дважды; второй вызов не вернется, пока второй клиент не попытается подключиться. Обратите внимание, что ваш код в корне нарушен — вы используете сокет TCP (по умолчанию), который является потоковым протоколом — нет абсолютно никакой связи между фрагментами данных, переданными.send()
на одном конце, и фрагментами данных, полученными.recv()
на другом. Вполне вероятно , что обе части клиентских данных будут считаны первой.recv()
, а вторая.recv()
затем зависнет в ожидании дополнительных данных. Вам нужны разделители или предшествующие значения длины.