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 ソケット通信のサンプル

Recommends
Pythonでソケット通信を実装しメッセージの送受信を行う
2021-07-25
python
linux
%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF
AWS Amplify で コンテナベースのデプロイを行い REST API を構築
2021-07-26
amazon%20aws
linux
docker
エンジニアなMacBookのセットアップ 開発環境の構築
2019-07-05
linux
python
node.js
seleniumの環境構築 Ubuntu + Python3で構築
2018-04-09
linux
ubuntu
selenium
textlint と GitHub Actions でドキュメントの自動校正のCIを構築
2022-02-12
linux
github
reviewdog
Linux の Network Namespace でルータを作成する
2022-02-05
linux
[Mac]ipコマンドの導入[iproute2mac]
2022-01-16
linux
mac
AutotoolsでconfigureやMakefileの作成
2022-01-10
centos
linux
red%20hat
homebrewでnodejsインストール&任意のバージョン利用
2021-11-30
node.js
linux
javascript
RPMパッケージ作成 Dockerを利用して
2022-01-10
centos
linux
red%20hat
CentOS8/RHEL8でのRPM管理における検討事項
2021-12-01
centos
linux
red%20hat
RPMのspecファイルで利用するマクロ・変数
2022-01-09
centos
linux
red%20hat
CentOS8 に Python + OpenCV をインストール
2021-06-05
python
opencv
centos
tracerouteコマンドでネットワークの経路を洗い出す
2021-10-30
linux
mac
Python poetryでパッケージ開発 PyPIで公開 Pytestでテスト CIをG...
2021-05-06
python
codecov
github
New Posts
[AWS CDK]ECS FargateでNestJSで作成したRESTfull APIデ...
2022-05-24
amazon%20aws
aws%20cdk
typescript
[AWS CDK]S3 CloudFront OAI Route53 構成 で NextJ...
2022-05-23
amazon%20aws
aws%20cdk
typescript
[CDK]SNS+SQS+DynamoDBでBounceとComplaint情報を収集する...
2022-04-11
amazon%20aws
node.js
typescript
[AmazonSES] node.js と ejs を利用してEメールを送信する
2022-04-09
javascript
node.js
amazon%20aws
GatsbyからNext.jsへのサイト移行
2022-04-04
next.js
gatsby
amazon%20aws
[AWS CDK] Lambda で S3 オブジェクトを読み書きするStackの構築
2022-03-18
aws%20cdk
amazon%20aws
typescript
[AWS CDK] S3 + CloudFrontの構築とOriginAccessIden...
2022-03-09
amazon%20aws
aws%20cdk
typescript
[AWS CDK] Bastion(踏み台)構築。SSMとEC2InstanceConne...
2022-03-06
amazon%20aws
aws%20cdk
node.js
[AWS CDK] Cognito を構築
2022-03-04
amazon%20aws
aws%20cdk
node.js
AWS CDK v2 でVPC上にAPI Gateway + Lambda + RDS +...
2022-02-28
amazon%20aws
aws%20cdk
node.js
javascriptで累積和を解く
2022-02-27
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%83%9F%E3%83%B3%E3%82%B0
atcoder
AWS Amplify で monorepo を導入し 単一リポジトリで複数プロジェクトを...
2022-02-25
git
github
amazon%20aws
AWS CDK v2 で Lambda関数のデプロイ
2022-02-23
typescript
amazon%20aws
aws%20cdk
NextJSでDevToysのようなものを作成した
2022-02-22
javascript
typescript
vercel
JSで動的計画法を利用して部分和問題を解く
2022-02-20
javascript
typescript
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
linux
curl
OpenCVのMatのタイプ一覧表
2018-11-25
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
linux
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
mysql
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
oracle
mysql
sqlite
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
amazon%20aws
linux
amazon%20s3
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
%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
%E9%9B%91%E8%AB%87
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
centos
red%20hat
EPEL
Macでターミナルからポートスキャンを行う方法。
2018-12-09
linux
mac
apple
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
python
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Date
▶︎
2022 年 (23)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
javascript(92)
linux(47)
amazon%20aws(41)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
node.js(30)
html5(29)
centos(24)
php(23)
python(22)
typescript(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(20)
canvas(18)
mac(18)
opencv(17)
mysql(17)
%E9%9B%91%E8%AB%87(15)
wordpress(15)
docker(14)
atcoder(13)
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)
red%20hat(12)
ubuntu(11)
amazon%20s3(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)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
mariadb(8)
aws%20cdk(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)
iam(5)
amazon%20ec2(5)
aws%20amplify(5)
curl(4)
webassembly(4)
ssh(4)
homebrew(4)
Author
s-yoshiki
s-yoshiki
githubzenntwitterqiita
ただの備忘録です。
JavaScript/TypeScript/node.js/React/AWS/OpenCV
※このブログの内容は個人の見解であり、所属する組織等の見解ではありません。