Pythonを使用してソケット通信を行うためのサンプルプログラム
TCPソケット通信を行う場合、TeraTermなどの汎用ターミナルソフトや一部弊社製品に付属している専用のアプリケーションを用いて行うことも可能ですが、ここではPythonを用いてヒューマンデータ製品と接続・通信する簡単なサンプルをご紹介します。
以下のPythonプログラムは、プログラム内で指定した固定のホスト(192.168.100.1)、ポート(10001)にTCP接続し、入力データの送信およびサーバ側からのデータ受信を行うサンプルプログラムです。
受信処理は別スレッドで実行されるため、受信中も送信が可能であり、接続・送受信・切断といった基本的なTCP接続の動作の確認を行うことができます。
本プログラムは全て標準ライブラリのみを使用したシンプルなものとなっております。
# HuMANDATA LTD. hdlSocket_v11.py
import socket
import threading
import sys
class TcpClient:
def __init__(self, host, port, bufsize, timeout):
self.host = host
self.port = port
self.bufsize = bufsize
self.timeout = timeout
self.hdlSocket = None
self.running = False
self.lock = threading.Lock()
def connect(self):
try:
self.hdlSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.hdlSocket.settimeout(self.timeout)
self.hdlSocket.connect((self.host, self.port))
self.running = True
print("OK: Connection")
return True
except socket.timeout:
print("Error: Connection timeout")
except socket.error as e:
print(f"Error: Connection failed ({e})")
return False
def recvLoop(self):
buf = b""
while self.running:
try:
data = self.hdlSocket.recv(self.bufsize)
if not data:
print("Error: Connection closed") # 0バイトデータ受信=相手側のclose
break
buf += data
lines = buf.split(b"\r")
for line in lines[:-1]:
print(line.decode("utf-8", errors="replace")) # 例外文字は?に置換
buf = lines[-1]
except socket.timeout:
continue # タイムアウトは再トライ
except socket.error as e:
print(f"Error: Receiving ({e})")
break
self.stop()
def sendLoop(self):
try:
while self.running:
data = input().encode("utf-8") + b"\r"
with self.lock:
self.hdlSocket.sendall(data)
except socket.error as e:
print(f"Error: Sending ({e})")
except KeyboardInterrupt:
print("\nKeyboardInterrupt")
finally:
self.stop()
def stop(self):
if self.running:
self.running = False
with self.lock:
try:
self.hdlSocket.shutdown(socket.SHUT_RDWR) # 送受信を終了
except Exception:
pass
self.hdlSocket.close()
print("Connection closed")
def main():
hdlClient = TcpClient("192.168.100.1", 10001, 128, 2.0) # host,port,bufsize,timeout
if not hdlClient.connect():
sys.exit(1) # 接続エラーで終了
recvThread = threading.Thread(target=hdlClient.recvLoop) # 受信用スレッド作成、関数指定
recvThread.start()
hdlClient.sendLoop()
recvThread.join()
if __name__ == "__main__":
main()
- Pythonプログラムの実行には、あらかじめPython実行環境のインストールが必要です。
- 本プログラムは、Pythonバージョン3.11.9で作成・確認しております。バージョンが異なる場合の動作については未確認です。
以下は、windowsターミナルを用いたプログラムの実行例です。
接続先は例としてLNX-210A-W24(4CH 独立絶縁型 Wi-Fi 4-20mA 電流モニタ)を使用しております。
実行前に、あらかじめ操作するPCなどとサーバ側(LNX-210A-W24)を接続しておく必要があります。
(LNX-210A-W24の場合はWi-Fiで接続)
- windowsターミナルはMicrosoftの無料ターミナルアプリです。
- ターミナルでhdlSocket_v11.pyを実行すると、プログラム内で指定したホスト・ポートに接続を試みます。
ここでTCP接続が成功すれば、「OK: Connection」が返ってきます。 - 上記の実行例では次に「CST,1」を入力し、送信しています。(「CST」はLNX-210A-W24の接続確認コマンド)
- 次の「OK,CST,1」はサーバ側(LNX-210A-W24)から返ってきた受信データです。
この他、一例としてLNX-006A、LNX-210A-L24、LNX-211V-L24、LNX-211V-W24などのLAN経由で通信を行う製品とも同様に接続、通信の確認が可能です。接続・通信時にはそれぞれの製品、環境に応じてIPアドレスやポート、送信コマンドのなどの変更が必要になる場合があります。
詳しくは各製品ページやマニュアルをご参照ください。
本プログラムをご利用いただくにあたり、以下の点についてあらかじめご確認ください。
- 掲載するプログラムは、あくまで弊社製品をご活用いただくための例としてご紹介するものであり、推奨するプログラムということではありません。
- 十分注意して作成しておりますが、意図せずバグやエラーなどを含む可能性があります。
- プログラムの使用に起因するトラブルにつきましては補償対象外となります。
- ご使用前に必ず使用者の責任にて、十分検証の上ご利用ください。
- 使用されているモジュールなどのライセンスについては、使用範囲に応じてご自身でお確かめください。
ご不明な点や間違い、バグなどありましたらご連絡ください。ご自身の環境に合わせて改良するなど、自由に改変してご活用くださると幸いです。
開発環境の使い方やプログラムの具体的な内容などについては、サポート外となりますのであらかじめご了承ください。
[kw] 2026-02-16 LNX LAN Wi-Fi Python プログラム ターミナル TEC-FA
[ ]
