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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐