2016-09-01 3 views
0

ビデオ講義の例。背景:講師はPythonでもっともシンプルなWebサーバーを提供しました。彼はソケットを作成し、バインドし、リスンし、接続を受け取り、データを受信し、大文字でクライアントに送り返しました。その後、彼は欠点があると言った:このWebサーバーはシングルスレッドです。それからフォークしましょう。PythonのマルチスレッドWebサーバ

私は十分に例を理解することはできません。しかし、まず、プログラムは終了します(sys.exit())。しかし、私はもう一度それを実行することはできません:

socket.error:[Errno 98]アドレスはすでに使用中です。

どのプロセスがポート8080でリッスンしているかを調べます。netstat --listen | grep 8080.何もない。

8080で何を聞いていますか?そしてそれを殺す方法?後で追加

を私はいくつかの時間(例えば、5〜10分)のために待っていれば、私はもう一度プログラムを実行できるという感があります。

import os 
import socket 
import sys 


server_socket = socket.socket() 
server_socket.bind(('', 8080)) 
server_socket.listen(10) 
print "Listening" 


while True: 
    client_socket, remote_address = server_socket.accept() 
    print "PID: {}".format(os.getpid()) 
    child_pid = os.fork() 
    print "child_pid {}".format(child_pid) 

    if child_pid == 0:  
     request = client_socket.recv(1024) 
     client_socket.send(request.upper()) 
     print '(child {}): {}'.format(client_socket.getpeername(), request) 
     client_socket.close() 
     sys.exit() 
    else: 
     client_socket.close() 

server_socket.close() 
+0

試してみる 'netstat -tulnp | grep 8080' – citaret

+0

それは役に立ちません。 sudoを試してみる。ちなみに、私は少し質問を追加しました( "後で追加"を見てください)。 – Michael

+0

これは役に立つかもしれません:http://www.harvard.edu/~fine/Tech/addrinuse.html – acw1668

答えて

0

正しいnetstatコマンドの使用法は次のとおりです。

netstat -tanp 

あなたが聞いてソケットを表示する-aオプションを必要とするので。 grepを追加してプログラムをすばやく見つける:

netstat -tanp| grep 8080 
関連する問題