2

ソケットについて学ぶためだけに、Pythonでソケットをいじっています。しかし、私は次の問題に本当に悩まされています。

import socket
soc = socket.socket(socket.AF_INET)
soc.bind(('localhost',8000))
soc.listen(0)
client = soc.accept()

ソケットが接続を待機しているときに、ctrl-cを押してもアプリケーションは終了しません。

アプリケーションを終了するにはどうすればよいですか?

これらの 2つの質問でも同様の問題が解決されましたが、acceptメソッドは別のスレッドから呼び出され、問題はctrl-cにそのスレッドを強制終了させる方法でした。ここでは、acceptメソッドはメインスレッドから呼び出されます。

編集:私はWin764ビットでpython3.3.0を実行しています。

4

5 に答える 5

6

CTRL+を使用する必要がありますBreak。それはそれを殺すはずです。

于 2013-03-03T19:40:28.353 に答える
4

ctrl-cを使用してアプリケーションを強制終了する方法や、タスク マネージャーを使用して強制終了する以外の方法が見つからなかったため、回避策を作成しました。

import socket,os
from threading import Thread

class socketListener(Thread):
    def run(self):
        soc = socket.socket(socket.AF_INET)
        soc.bind(('localhost',8000))
        soc.listen(0)
        client = soc.accept()

pid = os.getpid()
sl = socketListener()
sl.start()
input('Socket is listening, press any key to abort...')
os.kill(pid,9)

これにより、メイン スレッドでキーストロークを待機しながら、別のスレッドでスクリプトが実行されます。ユーザーがキーを押すと、アプリケーション全体が強制終了されます。

于 2013-03-09T15:27:32.340 に答える