#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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS