socket通信を用いて、複数のラズパイの開始タイミングをそろえて処理させたい

前提

プログラミング初心者です
初質問です
pythonでのsocket通信に関する質問です

実現したいこと

現在
サーバー側Windows搭載のPC
クライアント側ラズパイ4が三台
このような構成になっており、実現したいことしては
任意の数字(メッセージ)をサーバー側で入力する
サーバーがクライアントに同時にメッセージを送信する
クライアント側がメッセージを受取り処理を開始して、結果をサーバーに送信(三台同時に開始したい)
サーバーでメッセージを受取り、新しく数字を入れなおす

といったシステムをループさせたいです

発生している問題・エラーメッセージ

現在のプログラムだと一度通信を切らないと、サーバー側の数字が更新できない
whileループの中に入れると、複数台同時に送信できない、あるいは
bad adressといったエラーがでる

エラーメッセージ

該当のソースコード

#サーバー側
PADDR =
PORT =
sock_sv = socket.socket(socket.AF_INET)
#sock_sv.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
sock_sv.bind((IPADDR, PORT))
sock_sv.listen(3)

signal=input(">>")

def recv_client(sock, addr):
while True:

try: sock.send(signal.encode("utf-8")) data = sock.recv(1024) time.sleep(2) print(data ) except ConnectionResetError: break #クライアントリストから消去 sock.shutdown(socket.SHUT_RDWR) sock.close()

while True:

# クライアントの接続受付 sock_cl, addr = sock_sv.accept() # スレッドクラスのインスタンス化 thread = threading.Thread(target=recv_client, args=(sock_cl, addr)) # スレッド処理開始 thread.start()

#######クライアント側#######

import socket
import queue
import threading
import serial

##########ソケット指定#################
IPADDR =
PORT =
sock =socket.socket(socket.AF_INET)
sock.connect((IPADDR,PORT))

##########ソケット#################
signal=0
q= queue.Queue()

def recv_data(sock):
while True:
try:
signal_data = sock.recv(1024)
print(signal_data.decode("utf-8"))
q.put(signal_data)
except ConnectionResetError:
break
sock.shutdown(socket.SHUT_RDWR)
sock.close()

##########データ受信をサブスレッドで実行#################
thread = threading.Thread(target=recv_data, args=(sock,))
thread.start()

##########データ入力ループ#################
while True:
signal=q.get()
signal=float(signal)
try:
if signal > 0:
#########GPS##################
ser = serial.Serial("/dev/ttyS0", 38400,bytesize=7)
msg =ser.readline()
msg = msg.decode()
tok = msg.split(',')

############データ送信############# S_data=tok[1]+","+tok[2]+","+tok[4] S_data=str(S_data) sock.send(S_data.encode("utf-8")) signal=0 else: data=("error") sock.send(data.encode("utf-8")) except ConnectionResetError: break

sock.shutdown(socket.SHUT_RDWR)
sock.close()

pythonここに言語名を入力
ソースコード

### 試したこと ループ外にinputを設けるとエラーは起きないが、数字が更新できない ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント