Linux C++使用TCP通信实现同一局域网下电脑客户端与工控机服务端传输文件数据(亲测可用)

该文章描述了如何在Ubuntu18的VSCode客户端和Ubuntu16的工控机服务端之间,通过TCPsocket实现跨设备的yaml文件数据传输。客户端读取yaml文件,将数据发送到服务端,服务端接收到数据后保存为json文件。这一过程涉及到yaml文件读取、json.hpp库的使用以及在同一局域网下的IP配置。通过这种方式,可以在不重新编译的情况下远程更新工控机上的参数。
摘要由CSDN通过智能技术生成

使用平台说明:电脑(客户端)ubuntu18+vscode、工控机(服务端)ubuntu16+vscode

实现功能说明:电脑和工控机连在同一wifi局域网条件下,电脑(客户端)读取本地提前写好的config.yaml文件,通过socket通信传输yaml文件的数据到服务端,工控机(服务端)保存接收的数据到text.json文件。

涉及知识点:TCP的socket本地通信、JSON库的使用、yaml文件的读取、nlohmann/json中的json.hpp使用(注:此json.hpp非前面的JSON库)、对文件的读取以及写入操作。

大部分具体内容参考上一篇博客(注:一定要看,不然这篇看不懂):Linux C++使用TCP通信实现本地客户端与服务端传输文件数据(亲测可用)_ssz__的博客-CSDN博客

而本地TCP通信和同一局域网下通信不同的地方如下:

1、电脑(客户端)和工控机(服务端)两者的ip地址要设置在同一局域网下的ip,比如电脑和工控机连在同一wifi下时,电脑端的ip地址如下图所示,为10.7.5.174

工控机端的ip地址如下图所示,为10.7.5.142

所以在电脑(客户端)的client.cpp代码ip设置如下:

        serverAddr.sin_port = htons(8800);
        serverAddr.sin_addr.s_addr = inet_addr("10.7.5.142");

工控机(服务端)的server.cpp代码ip设置如下:

serveraddr.sin_port = htons(8800);
serveraddr.sin_addr.s_addr = inet_addr("10.7.5.142");

服务端和客户端的端口号和ip地址一定要确保一致

2、因为我的工控机安装的是ubuntu16,所以在服务端编译时与本地通信不同,此时编译代码如下:

g++ server.cpp -o server -ljsoncpp -std=c++11

测试:

        先启动工控机(服务端),再启动电脑(客户端):

服务端:

客户端:

        可以看到工控机(服务端)接收到来自电脑(客户端)的数据,其中客户端数据保存在yaml文件里,服务端数据保存在test.json文件里面,修改yaml文件数据,不需要任何编译,再次运行客户端代码,发现数据重新发送修改后的数据,test.json里面的数据也进行了更新。

总结:

        本次小项目是在上一篇博客的基础上从TCP本地通信延伸到TCP同一局域网通信 ,而这个项目的背景是工控机装在一个小车平台上,工控机运行代码控制小车的导航定位以及其他一些延伸功能,此时就需要调用一些参数。此时使用同一局域网下TCP通信就可以用电脑远程修改参数,从而更方便的对小车进行调参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值