使用平台说明:电脑(客户端)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通信就可以用电脑远程修改参数,从而更方便的对小车进行调参。