2012-02-26 21 views
0

私はプログラムを実行するとハングしますが、なぜスレッド化されているのかわからないので、スレッドを使用して複数のリクエストを処理するWebサーバーを作成しました。決して印刷段階には達しません( 'Connected by'、住所)。どんな助けと探検も非常に高く評価されるでしょう。シンプルなWebサーバーが実行時にハングアップ

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() 

乾杯

+0

インデントがちょっと混乱していると言っても、あなたのPythonプログラムを混乱させる恐れがあります。 –

+3

...あなたは** Python **を書いています。インデントを修正してください。 – Amber

+0

これは今すぐになるはずです – EmberZ

答えて

1

あなたは、Python 2の代わりに、Pythonの3を使用して例を実行していますか? Python 2 socket.makefileには、キーワード引数bufferingがありません。あなたの例は、Python 3でうまく動作します。

+0

pyclipseで2.7.2と3.2.2の両方をeclipseで使用しようとしましたが、印刷メッセージを表示せず、ハングしません。 – EmberZ

+0

ああ、Eclipseがあなたの問題かもしれない。 Eclipseの外でPython 3.xで実行しようとしています。 – zeekay

+0

まだpythonコマンドラインで実行しても結果が得られません。問題は接続時に発生するようですが、アドレス= s.accept()は何かのように見えます。 – EmberZ

関連する問題