2015-07-26 4 views
0

Я создал простой сервер чата с помощью Python. У меня возникли проблемы с выходом из программы с клиентской стороны. При подключении мне нужно иметь возможность набирать«/quit », а программа должна отключиться от обеих сторон, клиента и сервера вот мой код:.Python Socket Programming Client «не работает

alias= raw_input("Name: ") 
print 'Connected to remote host. You can start sending messages' 
sys.stdout.write(alias + '->'); sys.stdout.flush() 

while 1: 
    socket_list = [sys.stdin, s] 

    # Get the list sockets which are readable 
    read_sockets, write_sockets, error_sockets = 
     select.select(socket_list , [], []) 

    for sock in read_sockets: 
     if sock == s: 
      # incoming message from remote server, s 
      data = sock.recv(4096) 
      print data 
      if not data : 
       print '\nServer has ended Connection' 
       sys.exit() 

      else : 
       #print data 
       sys.stdout.write(data) 
       sys.stdout.write(alias + '->'); sys.stdout.flush() 

     else : 
      # user entered a message 
      msg = alias + '->' + sys.stdin.readline() 
      quit = '/quit' 

      #print msg == quit 
      print 
      if msg is quit: 
       print "Goodbye" 
       s.close() 
       sys.exit() 
      else: 
       s.send(msg) 
       sys.stdout.write(alias + '->') 
       sys.stdout.flush() 

ответ

0

Ваша линия if msg is quit должна быть if msg == quitis тесты для идентичности, а не равенство Если вы испытывали, если два объекта были одинаковыми, вы бы использовать.. is. Так как вы сравниваете две строки, вы должны использовать ==.

Кроме того, ваша переменная msg равна alias + -> + readline. поэтому "name -> /quit" никогда не будет равняться '/quit'.

+0

Да, к сожалению, я пробовал это при тестировании. Кажется, что есть проблема с моим сравнением, поскольку он просто печатает/завершает работу на сервере – Chris

+0

@chris я обновил свой ответ –