Проблема Python с сокетами - PullRequest
0 голосов
/ 29 декабря 2010

Hy, я пытаюсь создать простой сервер Telnet на python, но сервер получает только одну команду, отправленную клиентом ... Код:

from socket import *

server = socket(AF_INET, SOCK_STREAM)
server.bind((gethostname(), 23))
server.listen(5)

while 1:
   (connection, address) = server.accept()
   data = connection.recv(1024)
   print data
   if data=='X':
     break 

connection.close()

Ответы [ 3 ]

2 голосов
/ 29 декабря 2010

Вывод server.accept из цикла while позволит вашему клиенту отправлять больше команд:

from socket import *

server = socket(AF_INET, SOCK_STREAM)
server.bind((gethostname(), 23))
server.listen(5)

(connection, address) = server.accept()
while 1:
    data = connection.recv(1024)
    print data
    if data=='X':
        break 

connection.close()

С этим есть еще пара проблем: ваш сервер разрешит только один клиент.Пока этот один клиент подключен, никакой другой клиент не может подключиться.Вы можете решить эту проблему, используя потоки (что может быть сложно сделать правильно), или используя модуль выбора.

И telnet отправляет новые строки, поэтому данные никогда не будут 'X'.Вы можете проверить с помощью if data.strip() == 'X':

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

if not data:
    break
1 голос
/ 29 декабря 2010

После получения пакета данных вы распечатываете его и затем принимаете нового клиента.Поэтому сокет старого клиента больше не используется.

0 голосов
/ 29 декабря 2010

Как только вы прочитаете данные в переменную data, вы распечатаете их, если data отличается от 'X', connection выходит из области видимости и закрывается.

Вам необходимосохраните это connection где-нибудь и закройте его, когда вам действительно нужно (я думаю, когда клиент отправляет 'exit' ...).

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