2016-07-21 10 views
1

Ich habe ein Problem mit meinem Python-Skript mit Socket. Ich möchte testen, ob der Client die richtige Datei verwendet, nicht ein anderes Tool wie Telnet. Der Server:Python Socket Test recv() Daten

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
while 1: 
    conn, addr = s.accept() 
    data = conn.recv(1024) 
    if data == 'test': 
     print 'ok' 
    else: 
     print '!' 
     conn.close() 

Der Kunde:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(HOST, PORT) 
s.send('test') 

Der Client sendet 'Test' an den Server zu überprüfen, ob es die richtige Datei ist. Aber in dem Fall, wenn der Client nichts sendet (wenn der Client eine andere Verbindung verwendet), kann ich nicht testen, ob conn.recv (1024) gleich "testen" weil das Skript einfriert, ich muss den Client warten warten und der Server öffnet sich wieder. Vielen Dank im Voraus.

Antwort

0

können Sie select Funktion verwenden, um die Zeit der Server wartet auf neue Client-Verbindung oder eingehende Daten vom Client zu begrenzen:

import socket 
import select 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 

while 1: 

    # wait up to 60 seconds that a client connects 
    newClient,_,_ = select.select([s], [], [], 60) 

    if not (newClient): 
     # no client wanted to connect 
     print 'No new client in last 60 seconds!' 
     return 
    else: 
     # new connection 
     print 'New client!'   
     conn, addr = s.accept() 
     # wait up to 60 seconds that the client send data 
     readable,_,_ = select.select([conn], [], [], 60) 
     if (readable): 
      data = conn.recv(1024) 
      if data == 'test': 
       print 'ok' 
      else: 
       print 'client do not send test' 
     else: 
      print 'client send nothing' 

     # close connection 
     conn.close() 

select sehen.

+0

Es funktioniert, vielen Dank! ich liebe dich – Random123856