项目场景:
对机械臂设备进行联网的开发,创建socket通讯,传输数据到数据库
问题描述
在本地上可以建立通讯,但是在不同的主机上无法建立连接
#main.py
from TCPserver import TCPRobotServer
import queue
import asyncio
# import MySQL_Pool
#
# async def process_data(q):
# values = q.get()
# columns = 'robot_name,workorder_number,tool_number,cycle_target,cycle_completed'
# query = f'INSERT INTO milwaukeerellab.robot ({columns}) VALUES ({values}) '
# client = MySQL_Pool.Pool.get_connection()
# client.cursor.execute(query)
# client.close()
# q.task_done()
# 创建一个队列
q = queue.Queue()
# 使用示例
robot_server = TCPRobotServer('0.0.0.0', 9000)
robot_server.start()
while True:
client_socket, address = robot_server.server_socket.accept()
client_socket.settimeout(1000)
with client_socket:
data = client_socket.recv(1024).decode('utf-8')
if data:
q.put(data)
else:
pass
原因分析:
一般来说如果在本地上能建立连接,程序基本没有问题,因此排查原因后发现防火墙的问题
解决方案:
由于公司IT策略原因,无法直接关闭防火墙,因此用添加防火墙规则来解决问题
- 在setting中搜索 Allowed apps
- 点击Allow another app …
- 点击 Browse ,添加软件所在的路径即可
- 如果是和我一样使用python开发的,添加python解释器的路径即可