python、socketserverモジュールを適用して同時チャットプログラムを実現
4267 ワード
server.py
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while True:
conn = self.request
while True:
data = conn.recv(1024)
if str(data,'utf8') == 'q':
break
print(str(data,'utf8'))
inp = input('>>>')
conn.send(bytes(inp,'utf8'))
conn.close()
if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',8000),MyServer)
server.serve_forever()
client.py
import socket
sk = socket.socket()
address = ('127.0.0.1',8000)
sk.connect(address)
while True:
inp = input('>>>')
if inp == 'q':
print('Bye-bye')
break
sk.send(bytes(inp,'utf8'))
data = sk.recv(1024)
print(str(data,'utf8'))
解析:server.pyはまずsocketserverモジュールを呼び出し、独自のクラスMyServerを構築し、socketserverを継承します.BaseRequestHandler,このクラスのhanderメソッドを書き換え,server=socketserver.ThreadingTCPServer('127.0.0.1',8000),MyServer)コマンドはIPアドレス,ポート,プロトコルのカプセル化を実現し,ユーザ自身が実現する同時チャットコードをhandleメソッドに書き込み,プログラム実行時にhandleメソッドでコード実行を探す.同時チャットを実現する.