ChatGPTにsocket通信のサンプルpythonコードを書いてもらった

ChatGPTにsocket通信のサンプルpythonコードを書いてもらいました。

 

指示文(プロンプト):

UDPでsoket通信を行うpythonのコードを書いてください。
サーバ側はsocket_server.py 、クライアント側はsocket_client.py としてください。
クライアントからの通信を受け付けたサーバ側では、接続したクライアントのIPアドレス、ポート番号、送られてきた文字を表示してください。
socket_client.pyはクライアントとして起動し、サーバに送る文字列を入力できるようにしてください。明示的に終了させるまで、永続的に入力を受け付けるようにしてください。
クライアント側で「exit」と入力されたら終了するようにしてください。

 

コード:

# socket_server.py のコードは以下
import socket

def main():
    # サーバのホストとポート番号
    host = '127.0.0.1'
    port = 8000

    # ソケットを作成
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # ホストとポート番号をバインド
    sock.bind((host, port))

    print('サーバが起動しました。')

    while True:
        # クライアントからのデータを受信
        data, addr = sock.recvfrom(1024)

        # 受信したデータを表示
        print(f'クライアントからの接続: {addr[0]}:{addr[1]}')
        print(f'受信した文字列: {data.decode()}')

        # 'exit'という文字列が受信されたら終了
        if data.decode() == 'exit':
            break

    # ソケットを閉じる
    sock.close()

if __name__ == '__main__':
    main()


# socket_client.py のコードは以下
import socket

def main():
    # サーバのホストとポート番号
    host = '127.0.0.1'
    port = 8000

    # ソケットを作成
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    print('サーバに送る文字列を入力してください (終了するには "exit" を入力):')

    while True:
        # 入力を受け付ける
        message = input('> ')

        # サーバにメッセージを送信
        sock.sendto(message.encode(), (host, port))

        # 'exit'と入力されたら終了
        if message == 'exit':
            break

    # ソケットを閉じる
    sock.close()

if __name__ == '__main__':
    main()
    
結果:

以下のように成功しました。

 

同様に、「TCP通信に訂正して」と指示して出てきたコードは以下。

 

コード:

import socket

def main():
    # サーバのホストとポート番号
    host = '127.0.0.1'
    port = 8000

    # ソケットを作成
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # ホストとポート番号をバインド
    sock.bind((host, port))

    # クライアントからの接続を待機
    sock.listen(1)

    print('サーバが起動しました。')

    # クライアントからの接続を受け入れる
    client_sock, addr = sock.accept()

    print(f'クライアントとの接続が確立されました: {addr[0]}:{addr[1]}')

    while True:
        # クライアントからのデータを受信
        data = client_sock.recv(1024)

        # 受信したデータを表示
        print(f'受信した文字列: {data.decode()}')

        # 'exit'という文字列が受信されたら終了
        if data.decode() == 'exit':
            break

    # 接続を閉じる
    client_sock.close()
    sock.close()


if __name__ == '__main__':
    main()

import socket

def main():
    # サーバのホストとポート番号
    host = '127.0.0.1'
    port = 8000

    # ソケットを作成
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # サーバに接続
    sock.connect((host, port))

    print('サーバに送る文字列を入力してください (終了するには "exit" を入力):')

    while True:
        # 入力を受け付ける
        message = input('> ')

        # サーバにメッセージを送信
        sock.sendall(message.encode())

        # 'exit'と入力されたら終了
        if message == 'exit':
            break

    # 接続を閉じる
    sock.close()


if __name__ == '__main__':
    main()