@CeBePHblY

Python клиент-сервер на сокетах. Почему не корректно работает общение в режиме чата?

есть сервер на Python:
#!/usr/bin/env python3
import socket

host = "192.168.43.38"
port = 8080

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(5)
sock, addr = s.accept()
print("client connected with address " + addr[0])
sock.send(b"hello!")
while True:
	buf = sock.recv(1024)
	buf = buf.rstrip()
	if buf.decode('utf8') == "exit":
		sock.send(b"bye")
		break
	elif buf:
		sock.send(buf)
		print(buf.decode('utf8'))
sock.close()

и клиент на нем же:
#!/usr/bin/env python3
import socket
import time

host = "192.168.43.38"
port = 8080

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
    buf = input()
    s.send(buf.encode('utf8'))
    result = s.recv(1024)
    print('Ответ сервера: ', result.decode('utf8'))
    if buf == "exit":
        break
s.close()

time.sleep(10)

все бы ничего, но связка не корректно работает в режиме чата, а именно: после подключения клиента к серверу в окне сервера пишется "client connected with address...........", но следующая строка "hello!" клиенту не отправляется. далее, если с клиента написать серверу "stroka2", то на сервере отобразиться "stroka2" от клиента, а клиенту придет та самая строка "hello!", то есть получается, что от сервера приходят строки с опоздание м на одну строку. как это исправить?
  • Вопрос задан
  • 9103 просмотра
Решения вопроса 1
mututunus
@mututunus
Backend developer (Python, Golang)
#!/usr/bin/env python3
import socket
import time

host = "192.168.43.38"
port = 8080

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
print(s.recv(1024).decode('utf8'))

while True:
    buf = input()
    s.send(buf.encode('utf8'))
    result = s.recv(1024)
    print('Ответ сервера: ', result.decode('utf8'))
    if buf == "exit":
        break
s.close()

time.sleep(10)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы