Python socket - сообщения, которые не всегда регистрируются на сервере - PullRequest
0 голосов
/ 12 октября 2018

Пытаясь ознакомиться с библиотекой сокетов, у меня есть простая настройка сервера и клиента.По сути, я наткнулся и смог установить соединение и заставить сервер и клиент общаться друг с другом.Чтобы сделать его более интерактивным, у меня есть client.py, способный отправлять текст через командную строку.Кажется, что все работает должным образом (за исключением того, что серверное соединение разрывает соединение должным образом, если ввод клиента пуст), если я печатаю сообщение со стороны клиента, оно выплевывает мне обратно.В этом примере он также настроен на стороне сервера для печати текста.Я заметил, что серверная сторона не всегда «регистрирует» то, что отправляется клиентом.Я пытаюсь понять, почему это так.Будучи тестом, на самом деле это ни на что не влияет, я просто не могу понять, что происходит за кулисами.

РЕДАКТИРОВАТЬ: На самом деле, немного поиграв с ним, он появляется каждый раздругое сообщение выводится на консоль сервера.Я до сих пор не выяснил, почему это так

На стороне сервера:

#server.py
import  socket

ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.bind(('127.0.0.1',5000))
ss.listen(5)

while True:
    conn, addr = ss.accept()

    with conn:
        print ('Connected by', addr)
        while True:
            data = conn.recv(4096)
            print (data)
            if not data:
                print ("nothing received from client")
                ss.close()
                break

На стороне клиента:

#client.py
import socket

server = 'localhost'
port = 5000

s = socket. socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 5000))
s.send(bytes(b'Client has connected'))

while True:
    msg = input()
    s.send(bytes(input(msg),'utf-8'))
    if not msg:
        print ("Server should tear down connection...")
        # s.close()
        break

1 Ответ

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

В сокетах у вас нет методов __exit__, поэтому вы не можете использовать with conn:, необходимый для удаления этой части кода.

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