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()