TCP/IP开发实例(Python与LabVIEW的TCP通信)
在本篇文章中,我们将Python作为服务器端发送数据并接受指令,LabVIEW作为用户端接收数据并发送指令,构建一个server-client架构用于控制与数据传输。
这里写目录标题
1.为什么要使用TCP/IP协议和Python进行数据通信:
1.构建server-client架构。由中心服务器进行数据处理,处理后的数据传输到客户端,上位机只负责数据显示,进而减轻上位机负担。
2.将LabVIEW从项目中分离,使整个用户端环境部署简介。
3.便于整个项目的运维与版本更新。
4.可以获得更高的数据传输速度。
2.服务器端程序代码(Python):
在这里使用Python作为服务端,进行数据的处理与发送,Python提供socket包进行与客户端的TCP/IP通信。下面给出一个服务端的代码范例:
from socket import *
# todo 1、创建server-socket TCP协议
server_socket = socket(AF_INET, SOCK_STREAM)
# todo 2、创建目标服务器,绑定一个IP和端口 第一个参数表示绑定这台机器下的任何ip地址。这里使用本地回环IP(127.0.0.1),端口号任意
host_port = ('127.0.0.1', 8088)
server_socket.bind(host_port)
# todo 3、监听服务器的socket,listen让socket处于被动。这时就可以接收客户端的连接请求
server_socket.listen(1) #表示客户端线程挂起的个数
# todo 4、等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址
new_socket, client_addr = server_socket.accept() # todo 新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据
#前面创建好后就可以进入一个死循环一直进行数据的发送,当满足一定条件时中止循环并关闭服务连接
while True:
# todo 5、服务器接收客户端发送过来的控制指令,recv一般用于TCP协议的接收数据
command = (new_socket.recv(50)) .decode('utf-8')# data是字节数据,50是接受的字节长度,可以根据需要修改。根据客户端的不同指令,服务器进行不同相应,发送用户需求的数据
print('服务器接收客户端的指令是:', command) #在服务器终端打印指令
# todo 6、服务器端发送数据给客户端,在TCP中发送数据用send
data = np.ones(1024, dtype="int8") #准备要发送的数据,建议采用np.array,注意发送位数
new_socket.send(data.tobytes())#将数据转换为字节流发送,发送数据的字节数要和接收端匹配。
# 当接收的指令为退出时,中止服务器连接。
if (command == "exit") :
new_socket.close() # todo new_socket关闭意味着当前客户端的服务已经完成
server_socket.close() # todo server_socket关闭意味着整个服务器全部关闭
print("XX客户端连接已关闭")
break
3.客户端代码(LabVIEW):
LabVIEW中实现TCP连接的模块为TCP,在工具搜索栏中搜索TCP即可。与常规文件读写类似,包含四块内容:建立链接(打开文件)、读数据、写数据和关闭链接(关闭文件)。具体的连接方法如下:这里将发送指令和接收数据分到了两个并行的任务中执行。
4.特别注意
在整个项目中特别注意以下几点:
序号 | 注意事项 |
---|---|
1 | 服务器与用户端IP与端口号一定要一致 |
2 | 发送指令/数据的字节数一定要匹配 |
3 | 运行客户端前确保服务端已经运行 |