Pythonでソケット通信を実装しメッセージの送受信を行う

Pythonでソケット通信を実装しメッセージの送受信を行う

2021-07-256 min read

目次

  1. 概要
  2. ソース
  3. 動かしてみる
  4. 参考

概要

Pythonでソケット通信を実現する方法です。

ソース

server.py

サーバ側のソースです。

import socket

# ソケットオブジェクトの生成
# socket.AF_INET: IPv4の利用
# socket.SOCK_STREAM: TCPの利用
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ホスト&ポートを指定
sock.bind(('127.0.0.1', 1235))
# キューの数を指定する
sock.listen(1)

while True:
    # 接続の受信を開始
    conn, address = sock.accept()
    try:
        # リクエスト内容を取得
        req = conn.recv(1024).decode()
        print(f"Connection: {address}")
        print(f"Request: {req}")
        # レスポンスする
        conn.send(bytes(f"response {address}", 'utf-8'))
    except:
        print("error")
    finally:
        # 接続を終了
        conn.close()

client.py

クライアント側のソースです。

import socket

def request(req):
    # ソケットオブジェクトの生成
    # socket.AF_INET: IPv4の利用
    # socket.SOCK_STREAM: TCPの利用
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # ホスト&ポートを指定
    sock.connect(('127.0.0.1', 1235))
    # 接続オプション
    # socket.SOL_SOCKET: ソケット通信
    # socket.SO_REUSEADDR: 待ち状態中のポートが存在してもbindする
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # リクエストする
    sock.send(req.encode("UTF-8"))
    # レスポンス内容を取得
    msg = sock.recv(1024)
    print(msg.decode("utf-8"))

if __name__ == '__main__':
    for i in range(10):
        request(f"request: {i}")

動かしてみる

python server.py

でサーバ側を起動し

python client.py

でリクエストを実施します。

サーバ側では次のように表示されます。

Connection: ('127.0.0.1', 51263)
Request: request: 0
Connection: ('127.0.0.1', 51264)
Request: request: 1
Connection: ('127.0.0.1', 51265)
Request: request: 2
Connection: ('127.0.0.1', 51266)
Request: request: 3
Connection: ('127.0.0.1', 51267)
Request: request: 4
Connection: ('127.0.0.1', 51268)
Request: request: 5
Connection: ('127.0.0.1', 51269)
Request: request: 6
Connection: ('127.0.0.1', 51270)
Request: request: 7
Connection: ('127.0.0.1', 51271)
Request: request: 8
Connection: ('127.0.0.1', 51272)
Request: request: 9

クライアント側では次のように表示されます。

response ('127.0.0.1', 51263)
response ('127.0.0.1', 51264)
response ('127.0.0.1', 51265)
response ('127.0.0.1', 51266)
response ('127.0.0.1', 51267)
response ('127.0.0.1', 51268)
response ('127.0.0.1', 51269)
response ('127.0.0.1', 51270)
response ('127.0.0.1', 51271)
response ('127.0.0.1', 51272)

参考

【Python3】Pythonでソケット通信を試してみた

ソケット

TCPを使う(サーバ、SO_REUSEADDR)

知ったかぶりをしていたソケット通信の基礎を改めて学んでみる

Python ソケット通信のサンプル

Tags
javascript(103)
linux(54)
amazon%20aws(47)
node.js(43)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
typescript(33)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(19)
canvas(18)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
amazon%20lightsail(7)
react(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
next.js(6)
prisma(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
nestjs(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。※このブログの内容は個人の見解であり、所属する組織等の見解ではないです。