Сокет Python 3

Вероятно, это очень глупый вопрос, но я не могу понять, почему приведенный ниже код не работает:

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), и скрипт завис.

Что делать, если я хочу отправить несколько сообщений?

Любой намек приветствуется, Спасибо,

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

Steffen Ullrich 02.06.2018 14:42

Я понимаю. Но он должен что-то отправить обратно (тот же ответ, что и первый). Так почему этого не происходит? Я подозреваю, что это связано с тем, как я его закодировал (что-то связано с внутренними компонентами TCP), и что это неправильный способ.

reike 02.06.2018 14:47

Что дает вам уверенность в том, что сервер должен что-то отправить обратно? Если я запускаю ваш код на тестовом сервере, который действительно что-то отправляет обратно, он работает отлично. Итак, проблема не в вашем коде, а в неправильных предположениях, которые вы делаете о поведении серверов.

Steffen Ullrich 02.06.2018 14:51

Поскольку два запроса абсолютно одинаковы, поэтому я предполагаю, что он должен ответить два раза. Почему он ответит только на один запрос, а не на другой (угрюмый сервер: P)? А если серьезно, у меня такая же проблема с реальным приложением (которое должно отвечать на запрос и не отвечает, пока отвечает на выделенный клиент). Я воспроизвел проблему с помощью telnet, просто чтобы иметь возможность опубликовать ее в StackOverflow.

reike 02.06.2018 14:58

Вы предполагаете, что сервер, к которому вы подключаетесь, работает как веб-сервер, то есть те же результаты запроса (в большинстве случаев) в одном и том же ответе. Но такое поведение характерно для веб-сервера, а не для любого произвольного сервера и особенно для telnet-сервера. И вы не можете просто взять проблему, которая у вас есть, например, с веб-сервером, и воспроизвести ее с помощью telnet-сервера, поскольку эти серверы ведут себя по-разному. Так что вам, вероятно, лучше спросить о реальной проблеме, а не о проблеме с игрой, которая у вас есть.

Steffen Ullrich 02.06.2018 15:01

Хм. Хорошо, думаю, я попробую другой подход. Спасибо за ваши ответы.

reike 02.06.2018 15:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
45
0

Другие вопросы по теме