2012-02-26 3 views
0

Pour un travail, j'ai créé un serveur web qui gère plusieurs requêtes avec des threads, mais il se bloque maintenant quand je lance le programme et je ne sais pas pourquoi. Il n'atteint jamais la phase d'impression ('Connecté par', adresse). Toute aide et explication seraient grandement appréciées.Un simple serveur web se bloque

class Connect(threading.Thread): 

def __init__ (self, connection): 
    self.clientsocket = connection 
    threading.Thread.__init__(self) 

def run(self): 
    stream = connection.makefile(mode="rw", buffering=1, encoding="utf-8") 
    firstLine = stream.readline().split(" ") 
    hList = [] 
    method = firstLine[0] 
    path = firstLine[1] 
    line = stream.readline().strip() 

    while line != "": 
     hList.append(line.split(":", 1)) 
     line = stream.readline().strip() 

    if method != 'GET': 
     stream.write("HTTP/1.0 405 Unsupported\n\nUnsupported") 
    else: 
     stream.write("HTTP/1.0 200 Success\n") 
     stream.write("Content-type: text/plain\n") 
     stream.write("\n") 
     stream.write(str(firstLine) + '\n') 

     for header in hList: 
      stream.write(str(header) + "\n") 

    stream.close() 
    connection.close() 
    return path == "/stop" 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
s.bind(('', 9999)) 
s.listen(1) 

while 1: 
    connection, address = s.accept() 
    print('Connected by', address), 
    Connect(connection).start() 

Vive

+0

Dire "désolé si l'indentation est un peu foirée" est susceptible de gâcher votre programme Python aussi; ')'. –

+3

... vous écrivez ** Python **. S'il vous plaît corriger l'indentation. – Amber

+0

Cela devrait être maintenant – EmberZ

Répondre

1

utilisez-vous votre exemple avec Python 2 au lieu de Python 3? En Python 2 socket.makefile n'a pas un argument mot-clé buffering. Votre exemple fonctionne bien avec Python 3.

+0

J'ai essayé d'utiliser à la fois 2.7.2 et 3.2.2 sur pydev avec eclipse, ni afficher le message d'impression et se bloque. – EmberZ

+0

Ah, Eclipse pourrait être votre problème alors. Essayer de l'exécuter en dehors d'Eclipse avec Python 3.x. – zeekay

+0

Toujours pas de résultats lors de l'exécution à travers la ligne de commande python. Le problème semble se produire à la connexion, adresse = s.accept() comme tout ce qui précède ce point sera imprimé. – EmberZ

Questions connexes