Вероятно, это очень глупый вопрос, но я не могу понять, почему приведенный ниже код не работает:
import socket
host = "127.0.0.1"
port = 23
mySocket = socket.socket()
mySocket.connect((host,port))
messages = [b"test",b"test2"]
for msg in messages:
mySocket.sendall(msg)
data = mySocket.recv(1024).decode(errors = "ignore")
print("Received from server :" + data)
mySocket.close()
Я получу ответ только на первый запрос. Второй запрос отправлен (я проверил его с помощью Wireshark), но я не получил никакого ответа (нет ответного пакета в Wireshark), и скрипт завис.
Что делать, если я хочу отправить несколько сообщений?
Любой намек приветствуется, Спасибо,
Я понимаю. Но он должен что-то отправить обратно (тот же ответ, что и первый). Так почему этого не происходит? Я подозреваю, что это связано с тем, как я его закодировал (что-то связано с внутренними компонентами TCP), и что это неправильный способ.
Что дает вам уверенность в том, что сервер должен что-то отправить обратно? Если я запускаю ваш код на тестовом сервере, который действительно что-то отправляет обратно, он работает отлично. Итак, проблема не в вашем коде, а в неправильных предположениях, которые вы делаете о поведении серверов.
Поскольку два запроса абсолютно одинаковы, поэтому я предполагаю, что он должен ответить два раза. Почему он ответит только на один запрос, а не на другой (угрюмый сервер: P)? А если серьезно, у меня такая же проблема с реальным приложением (которое должно отвечать на запрос и не отвечает, пока отвечает на выделенный клиент). Я воспроизвел проблему с помощью telnet, просто чтобы иметь возможность опубликовать ее в StackOverflow.
Вы предполагаете, что сервер, к которому вы подключаетесь, работает как веб-сервер, то есть те же результаты запроса (в большинстве случаев) в одном и том же ответе. Но такое поведение характерно для веб-сервера, а не для любого произвольного сервера и особенно для telnet-сервера. И вы не можете просто взять проблему, которая у вас есть, например, с веб-сервером, и воспроизвести ее с помощью telnet-сервера, поскольку эти серверы ведут себя по-разному. Так что вам, вероятно, лучше спросить о реальной проблеме, а не о проблеме с игрой, которая у вас есть.
Хм. Хорошо, думаю, я попробую другой подход. Спасибо за ваши ответы.





Если сервер отправит что-то обратно или нет, это полностью зависит от сервера, к которому вы подключаетесь (в этом случае может быть демон telnet на основе порта), и клиент не может заставить сервер отправить ответ. Вы предполагаете определенное поведение сервера, которого нет на сервере, к которому вы подключились.