linux下用C++写UDP通信程序该怎么写

linux下用C++写UDP通信程序该怎么写,第1张

用ACE,它提供了很完善的一套构架。

#include "ace/SOCK_Dgram_Mcast.h"

#include "ace/INET_Addr.h"

#include "ace/OS.h"

#include "ace/ACE.h"

#include "ace/Log_Msg.h"

int ACE_TMAIN (int argc, char* argv[])

{

ACE_Time_Value ti = ACE_Time_Value (0, 20000)

ACE_INET_Addr local_addr ((u_short) 9000)

ACE_INET_Addr recv_addr

ACE_SOCK_Dgram recv_dgram

//打开端口

if (recv_dgram.open (local_addr) == -1) {

ACE_DEBUG ((LM_ERROR, "%p\n", "Recieving data gram open"))

ACE_OS::exit (-1)

}

ACE_Time_Value t = ACE_Time_Value::zero

while (1) {

//recieve data gram

char buf[2048]

//接收UDP数据

ssize_t recv = recv_dgram.recv (buf, 2048, recv_addr)

//显示接收了多少数据,以及数据的来源

ACE_DEBUG ((LM_DEBUG, "%M [%t %N:%l] %s:%d recieved %d\n", recv_addr.get_host_addr (), recv_addr.get_port_number (), recv))

if (recv <= 0) {

ACE_DEBUG ((LM_DEBUG, "%M [%t %N:%l] Can't recieve any data gram from the port (%s:%d)\n", recv_addr.get_host_addr (),recv_addr.get_port_number ()))

ACE_OS::sleep (ti)

continue

}

}

return 0

}

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层--传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

先nc -uv,然后在输入数据即可 nc -uvz可以用来测试udp端口是否开启监听 比如要向本地10001端口发送数据,可以使用 echo "hello" >/dev/udp/localhost/10001 方法二的好处在于,发送完数据后自动退出。当我们需要在命令行下循环向特定udp端口发送数据时,我们只能使用方法二。 例如 while true do echo "xxxx" >/dev/udp/localhost/10001 done


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6243557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存