1. ホーム
  2. python

[解決済み] python ソケットサーバ - クライアントが接続を切断してもリスンする

2022-02-18 09:10:20

質問

これは正常に動作します

  #!/usr/bin/python
    import urllib
    import socket              
    import os
    s = socket.socket()         
    host = socket.gethostname() 
    port = 1514                
    s.bind((host, port))        

    s.listen(500)                 

    c, addr = s.accept()  
    while True:
          # Establish connection with client.
          print 'Got connection from', addr
          print c.recv(1024)
          c.send('Recieved') 

    c.close()                
    raw_input()

でも、ちょっとだけ。

  1. クライアントが切断すると、プログラムが終了してしまう。クライアントが切断しても、プログラムが新しい接続をリッスンし続けるようにしたい。

  2. 接続を無限に待つようにするにはどうしたらいいですか?

解決方法は?

を付けるだけです。 while True ループの外側で、接続が閉じるかどうかをtry/exceptしてください。 つまり accept() はループの中で呼び出すことができます。

しかし、これを行うための正しい方法は、通常、Python Twistedで実装されているような非同期/イベント駆動型のアプローチを用いることです。 この方法では、1つの接続が閉じるのを待ってから次の接続を受け入れるのではなく、複数のクライアントから同時に接続を受け入れることができます。