Как повторить, используя Telnet - PullRequest
0 голосов
/ 09 января 2019

Я создал эхо-сервер, который прослушивает входящие соединения и выводит все полученные данные. Я использую telnet для установления соединения.

#!/usr/bin/env python
import socket
import sys

# Create socket
sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Port for socket and Host
PORT = 8001
HOST = 'localhost'

# bind the socket to host and port
sockfd.bind((HOST, PORT))
# become a server socket
sockfd.listen(5)

while True:
    # Establish and accept connections woth client
    (clientsocket, address) = sockfd.accept()

    print("Got connection from", address)
    # Recieve message from the client
    message = clientsocket.recv(1024)
    reply = 'Server output: ' + message.decode('utf-8')
    if not message:
        break
    # Display messags.
    clientsocket.sendall(str.encode(reply))

# Close the connection with the client
clientsocket.close()

В настоящее время после того, как я запросил «server output:», он зависает, и ничего не возвращается на терминал.

1 Ответ

0 голосов
/ 09 января 2019

Проблема в том, что у вас есть вызов sockfd.accept() внутри цикла while:

while True:
   # Establish and accept connections woth client
   (clientsocket, address) = sockfd.accept()

... из-за этого после того, как сервер получит первые данные, он снова заблокируется, ожидая другого соединения TCP.

Переместите этот вызов выше линии while True:, и вы получите поведение, более соответствующее вашим ожиданиям.

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