2010-12-29 2 views
0

Hy, я пытаюсь создать простой сервер Telnet в питона, но receve сервер только одна команда отправки Клиентом ... Код: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() 

ответ

2

Принимая server.accept вне времени цикла позволит вашему клиенту отправить в нескольких командах:

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 
0

После того, как вы читаете данные в data переменная, вы печатаете ее тогда, если data отличается от «X», connection выходит из сферы действия и закрывается.

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

+0

да, но если клиент посылает «ааа» сервер получит сообщение и распечатать его и сервер DonT закрыть соединение !! после того, как клиент отправит «www», сервер не распечатает никаких сообщений !! но соединение остается активным! –

1

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

Смежные вопросы