#author("2023-01-20T02:23:08+09:00","default:parallel-distributed","parallel-distributed") #author("2023-01-21T08:25:42+09:00","default:parallel-distributed","parallel-distributed") [[第5回]] * マルチクライアントチャット [#b3cbf6cc] ** クライアントプログラム [#a7996de4] #code(Python){{ #ex05_02.py # -*- coding: utf-8 -*- import socket import threading import sys PORT = 9998 def start_client(host): print("start client socket, connect") try: #socket.socket ... socket を作成し、socに代入 soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #IPアドレスがhostのserver socketにsocを接続 soc.connect((host,PORT)) #受信担当の関数handlerを物threadでうごかすhandle_threadを生成。 handle_thread=threading.Thread(target=handler,args=(soc,)) #handle_threadをstart handle_thread.start() except: #接続時にエラーがあった場合の処理 print("connect error.") #受信のthreadが動いている間、並行して、入力があったら、それをサーバに送信する。 while True: try: line=input() soc.send(bytes(line,"utf-8")) except KeyboardInterrupt: soc.close() exit() #受信の処理。送信threadとは別に、並行して処理を行う。 def handler(soc): print("at client, connected, start handler") while True: try: data = soc.recv(1024) print("[receive]- {}".format(data.decode("utf-8"))) except socket.error: soc.close() break exit() if __name__ == "__main__": # python ex05_02.py <serverのIPアドレス> で起動。args[1]に、IPアドレス。 args=sys.argv start_client(args[1]) }} ---- #counter