# linux_UDP_TCP_maxi_test **Repository Path**: maxibooksiyi/linux_udp_tcp_maxi_test ## Basic Information - **Project Name**: linux_UDP_TCP_maxi_test - **Description**: 自己测试网络通信的代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-28 - **Last Updated**: 2025-02-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: myself ## README # linux_UDP_TCP_maxi_test 目前所测试的代码都是Linux网络编程.zip里面的(现在不止了),里面就一个UDP的例程,其他的都是TCP的。 Linux网络编程.zip 是在这里下的 : https://download.csdn.net/download/u013291818/9822525 最开始是在这里发现的 : https://blog.csdn.net/u013291818/article/details/70477196 里面所有的cpp文件都可以通过 g++ 文件名.cpp -o 生成的可执行文件名称 来进行编译,生成的可执行文件名词可以自己自由命名,保证别相互冲突即可。注意不能用gcc编译,会有报错。 .c文件是可以用gcc编译的 终端运行 ./可执行文件名词 就可以运行之前编译生成的可执行文件了。 2021.9.9 TCP/新的一个TCP通信例程(可以终端一直发送,这个体验更好) 是来自于 https://blog.csdn.net/sinat_16643223/article/details/120204885 UDP/udp_send.c UDP/udp_resv.c 是来自于 https://blog.csdn.net/sinat_16643223/article/details/119177283 TCP/再一个新的TCP通信例程(可以发送十六进制)/client.c 是来自于 https://blog.csdn.net/sinat_16643223/article/details/120207003 上面这两个来自于同一个作者,因为我看到这个的UDP是把要发送的字符串写在代码里的,我正好需要字符串写在代码里的TCP的通信,然后再去看下这个作者的博客,也有TCP通信的代码,而且要发送的字符串是写在代码里的,不是终端输入的,所以就也拿来用了。 HTTP/例程一/httpclient.c 是来自于 https://blog.csdn.net/sinat_16643223/article/details/120227764 HTTP/例程二/httpclient.c 是来自于 https://blog.csdn.net/sinat_16643223/article/details/120211926 要和调舱进行http通信是指卓翼的视辉科技的吊舱 HTTP/hivisoion_projcet的用法进入到digest文件夹,打开终端,用make命令编译,因为里面已经写好makefile了,然后在终端输入 ./app IP地址 端口号 并敲回车即可运行。 此工程来自此篇博文:https://blog.csdn.net/sinat_16643223/article/details/120257895 UDP/udp_send_int.c UDP/udp_resv_int.c 是用来测试通过UDP发送想发送的int值,64位double值的发送端和接收端代码,因为UDP接口是char类型的,接收端代码把接收到的值赋给对应的int型 double型,而且值都是OK的,这里面代码的写法是值的学习的或者作为以后自己的一种标准写法。发送端接收端这两个c代码都是在本地ubuntu上运行进行UDP通信。 UDP/udp_send_int_1.c UDP/udp_resv_int_1.c 是在UDP/udp_send_int.c UDP/udp_resv_int.c 基础上修改,用来测试解决大小端问题的,对于传送int数据,在接收端对接收到并赋值的int类型数据加上一个ntohl函数,打印显示出的值就正常了,这样发送端可以按照正常顺序发送int的那四个字节,不用先反过来再发。 UDP/udp_send_img.py 是孙工当初给的读取树莓派CSI摄像头并通过UDP发出去的python文件。 linux_udp_tcp_maxi_test/UDP/udp_picture_test/udp_send.cpp linux_udp_tcp_maxi_test/UDP/udp_picture_test/udp_recv.cpp 是进行图像UDP发送测试的,包括对大的图片先发报头再分片发送。代码使用方法:在cpp所在文件夹(即linux_udp_tcp_maxi_test/UDP/udp_picture_test/)里打开终端,先运行 cmake . 再运行make 编译完成,再分别在cpp所在文件夹打开两个终端,先运行./udp_recv 再在另一个终端运行./udp_send 就可以看到接收端弹出一个窗口显示接收到的图片,也就是显示的所传的1234.jpeg这个图片,以上操作都是在ubuntu上进行的,在本地ubuntu上进行的UDP通信,还没有跨主机。 linux_udp_tcp_maxi_test/UDP/udp_picture_test/文件夹里面初始文件就三个 udp_send.cpp udp_recv.cpp 和cmakelists,其他的都是编译生成的,cmakelists是需要自己写的,当然我是参考(复制)的一本opencv书上的《OpenCV4快速入门》。如果你的 C++ 代码里有opencv,那就不能再单纯的用g++编译了,需要写cmakelists.txt了,因为涉及到调用外界的库了。 linux_udp_tcp_maxi_test/UDP/udp_picture_test/udp_send_kuazhuji.cpp 其实就是把IP地址改为服务端IP地址,就是实现和接收端的跨主机通信了,接收端代码不需要改,和本地UDP通信代码一样,因为只需要依旧监听本地端口就行。 linux_udp_tcp_maxi_test/UDP/udp_picture_test/udp_send_imu.cpp 为配合卓翼的IMU UDP接收并发布IMU话题写的一个IMU UDP发送的代码,可以联合进行测试,已经测过OK了,接收端代码可见 https://gitee.com/maxibooksiyi/rflysim_udp_picture_rec_topic_pub_rospkg/blob/maxitest/src/imu_receive.cpp 说明一下 linux_udp_tcp_maxi_test/UDP/udp_picture_test/ 文件夹内的编译是需要opencv的,CMakeList里面是写的OpenCV 3.2.0,实际在opencv3.3.1的环境里编译也是可以的,如果不行,就去CMakeLists里面修改opencv的版本,修改为当前ubuntu上的opencv版本。20220519,现在明白为什么了,因为cmakelists里面写的版本号是指要求的最低版本,并不是必须那个版本。 20231102,再细看UDP/udp_send_int_1.c和UDP/udp_recv_int_1.c,以及TCP/再一个新的TCP通信例程(可以发送十六进制)/client.c,和李兴华主编的《Linux网络编程》一书中的基于socket接口函数的UDP通信和TCP通信流程示意图对比可以发现,就是标准的socket编程,步骤函数都是一样的。这可能就是万变不离其宗的宗,如果是写UDP通信或者TCP通信的话。 ![](./file_for_md/图片20231102224536.jpg) ![](./file_for_md/图片20231102224546.jpg) UDP/mavlink_udp_example.c mavlink给的udp发送和接收的示例代码,里面也是用的socket编程,感觉可以作为一个UDP示例程序来参考。 代码来自 : https://gitee.com/maxibooksiyi/mavlink/blob/master/examples/c/udp_example.c# 说明页面 https://mavlink.io/zh/mavgen_c/example_c_udp.html UDP/udp_multithread.cpp 让chatgpt写的基于多线程的UDP循环发送接收代码,编译命令是```g++ -o udp_multithread udp_multithread.cpp -lpthread```,代码运行测试过OK。