Python及びUDP方式を用いて、ターミナル上での入力内容を送受信するコード


クライアント側のコード(client.py)

import socket

# UDP方式でソケット作成
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = "localhost"
server_port = 9001

try:
        # 任意の名前とメッセージを、ターミナル上で入力する
    username = input("please input your username: ")
    message = input("please input message: ")
    inputcontents = f"username: {username} message: {message}".encode("utf-8")

    # 入力内容を送信
    client_socket.sendto(inputcontents, (server_address, server_port))

        # 接続されている限りは、他のクライアント側から入力された内容を表示する
    while True:
        data, server = client_socket.recvfrom(4096)
        print(data.decode("utf-8"))

finally:
    client_socket.close()

サーバー側のコード(server.py)

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = "0.0.0.0"
server_port = 9001
server_socket.bind((server_address, server_port))
clients = {}

print(f"starting up on {server_address} port: {server_port}")

while True:
    try:
        data, address = server_socket.recvfrom(4096)

                 # 新規接続の場合、clientsにアドレスを追加する
        if address not in clients:
            clients[address] = True
            print(f"New client connected: {address}")
        # 他のクライアント全てに送信された入力内容を中継する
        for client_address in clients.keys():
            if client_address != address:
                server_socket.sendto(data, client_address)
                
    except Exception as e:
        print(f"error: " + e)

動作方法

1.まず、現在のディレクトリを確認の上、ターミナルで"python3 server.py"と入力する。
2.次に、別のターミナルを複数窓立ち上げ、全ターミナルで1と同じディレクトリに移動の上で"python3 client.py"を入力する。
3.指示に従ってusername,messageを入力する。
4.他のクライアントに送信されているかを確認する。

この記事が気に入ったらサポートをしてみませんか?