[英]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.