🦁

Linuxを使って簡単なTCPサーバデモ通信をコマンドラインから実現

に公開

簡単なTCPサーバとクライアントをPythonでコーディングし作成した。
server.py

このファイルはPythonのソケット通信を使ったシンプルなサーバープログラムである。Pythonで用意されているsocketモジュールを使用し、ローカル環境で動作するシンプルなサーバーを構築することができる。

ソケット作成
6: socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INETはIPv4を意味している。SOCK_STREAMはTCP通信を表す。

サーバーの設定
7: s.bind((HOST, PORT))
8: s.listen()
bindでIPアドレスとポート番号をサーバーに割り当てて、listenで接続待機状態に入る。

クライアント接続の受け入れ
10: conn, addr = s.accept()
acceptは接続要求を待ち、クライアントがつながると新しいソケットconnを返す。addrはクライアントのアドレス情報である。

データ送受信
14: data = conn.recv(1024)
18: conn.sendall(b"OK: " + data)
recvでクライアントからデータを受け取る。sedallで「OK:データ」という形式でそのまま送り返す。

client.py

このファイルは先ほどのserver.pyとペアで動かすためのクライアントプログラムである。

ソケットの作成
6: socket.socket(socket.AF_INET,socket.SOCK_STREAM)
サーバーと同じく、IPv4 + TCPの通信ソケットを作成。

サーバーに接続
7: s.connect((HOST, PORT))
サーバーのIPアドレスとポート番号を指定して接続。サーバーが127.0.0.1:5000で待機しているので、そこにアクセスする。

データ送信
8: s.sendall(b"Hello server")
サーバーに文字列「Hello server」を送信する。bがついているのは「バイト列」にするためである。(文字列fはそのまま送ることができないから)

データ受信
9: data = s.recv(1024)
サーバーからの返答を最大1024バイトまで受け取る。先ほどのサーバーは「OK:Hello server」と返す使用になっているので、その文字列を受信する。

結果を表示
11: print("From server:", data.decode())
decode()でバイト列を文字列に変換して出力する。

〇実行方法
サーバーを起動
python server.pyやpython3 server.py
待機中...と表示される。

ローカルの別ターミナルからtelnetなどで接続
telnet 127.0.0.1 5000
文字を入力するとサーバーが受信して「OK:入力内容」を返す。


〇サーバーとクライアントの関係
[client.py] → "Hello server" → [server.py]
[client.py] ← "OK: Hello server" ← [server.py]
クライアントは「送信役」、サーバーは「受け取り+応答役」というイメージ。

Discussion