[英]Multiple TCP socket connections Python
我是套接字編程的新手,我正在努力使用多個 TCP 套接字連接和交換信息。
我有兩個用 C 編寫的開發板和一個帶有 Python 腳本的 PC 的設置。 兩塊板和 PC 通過 LAN 電纜連接到交換機。 兩個開發板都被編程為從 PC 接收到數據后立即發送回“OK”。
我想連接到兩個電路板並在使用 Python 腳本發送和接收信息時保持套接字打開。 如果我只能連接到一個板,我可以做到這一點沒有任何問題。 但是,如果我嘗試連接到兩塊板,則在建立連接或通信期間連接會超時。
這是我的代碼:
主文件
from board import Board
b1 = Board(1, "192.168.0.254", 5)
b2 = Board(2, "192.168.0.77", 7)
b1.establish_connection()
b2.establish_connection()
while True:
pass
板子.py
import threading
import socket
import random
import time
import select
class Board():
def __init__(self, nr, host_address, port_nr):
self.server_addr = (host_address, port_nr)
self.nr = nr
self.dt = 10
def establish_connection(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.settimeout(5)
print("Trying to establish a connection board {}".format(self.nr), self.server_addr)
try:
self.s.connect(self.server_addr)
threading.Thread(target = self.communication).start()
print("Connection established board {}".format(self.nr))
return True
except socket.timeout:
print("Not connected. Connetion timeout.")
return False
except socket.error as e:
print("Not connected. " + str(e) + ".")
return False
def communication(self):
while True:
self.send_data([random.randint(0,500), random.randint(0,500), random.randint(0,500)])
start_time = time.time()
while (start_time + self.dt) >= time.time():
data = self.receive_data()
if data is not None:
print(data)
break
def send_data(self, a):
x, y, z = a[0], a[1], a[2]
msg = "S,X%i,Y%i,Z%i,E" %(x,y,z)
print("Sending msg {0}".format(msg))
nsent = self.s.send(msg.encode('utf-8'))
def receive_data(self):
readable_s, _, _ = select.select([self.s], [], [], 0.001)
if readable_s:
msg = self.s.recv(20).decode('utf-8')
return msg
當我使用 Hercules 而不是 python 腳本時,我也遇到了同樣的問題。 圖中可以看到兩個開發板都可以連接,但是收到數據后沒有回“OK”。
問題不在於 python 代碼,而在於板子指定了網關。 在上傳到開發板上的 C 代碼中將網關改回 0.0.0.0 后,同步通信開始工作。 此外,每塊板必須有不同的 MAC 地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.