blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

各種環境の構築と管理を承ります。

  • 仮想環境: Openstack, GCP, AWS, Azure, ...
  • アプリケーション: WordPress, GitLab, Redmine, ...

List

PythonでSocket通信

概要

DartとPythonを通信させたいのですが、 WebSocketよりもPC内部なら普通のSocketの方が便利だと思ったので、 とりあえずPythonでのSocket通信を試してみました。

server.py

クライアントから送られてきた文字列に対して “serv ::”を先頭に付加したデータを返すエコーサーバみたいな動作をします。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 60000))
s.listen(1) # backlog = 1
connection, address = s.accept()
while True:
  data = connection.recv(1024)
  if data == b'':
    break
  else:
    connection.sendall(b"serv :: " + data)

client.py

標準入力から受け取ったデータをひたすらサーバに送り、 サーバからの返答を標準出力に吐き出します。

import sys, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 60000))

for l in sys.stdin:
  s.sendall(bytes(l, "ascii"))
  print(s.recv(1024).decode("ascii"))

テスト

サーバを立ちあげて、クライアントからデータを送り、 返ってくるのがわかると思います。

$ python server.py &
$ python client.py
hoge
serv :: hoge

reference