server.py と client.py の 2 つのファイルがあり、どちらも asyncore.dispatcher を使用して作成されています。
サーバー.py
import asyncore, socket
class Server(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(('', port))
self.listen(1)
print "Waiting for connection..."
def handle_accept(self):
socket, address = self.accept()
print 'Connection by', address
socket.send("Hello Server")
def handle_read(self):
print "Reading..."
out_buffer = self.recv(1024)
if not out_buffer:
self.close()
print out_buffer
def handle_closed(self):
print "Server: Connection Closed"
self.close()
s = Server('0.0.0.0', 5007)
asyncore.loop()
Client.py
import asyncore, socket
class Client(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host, port))
print "Client Start..."
def handle_close(self):
print "Client: Connection Closed"
self.close()
def handle_read(self):
data = self.recv(1024)
if data:
print "Received ", data
self.send("Hello Client")
c = Client('127.0.0.1', 5007)
asyncore.loop()
結果:
実行server.py
:
Waiting for connection...
次にclient.py
:
Client Start...
Received Hello Server
Client: Connection Closed
Client: Connection Closed
最後に client.py が終了し、server.py の出力ウィンドウにもう 1 行表示され、サーバーは引き続き実行されます。
Connection by ('127.0.0.1', 58197)
理解できないことがあります:
client.pyの関数
handle_closed
が2 回実行されるのはなぜですか?server.py
handle_reading
の関数が実行されないのはなぜですか? client.pyはメッセージ ("Hello Client") を送信しましたが、サーバーがそれを受信できないのはなぜですか?server.py
handle_closed
の関数が実行されないのはなぜですか? クライアントの終了時にserver.pyでいくつかのコードを実行したいのですが、server.pyでは何もしないようです。handle_closed