#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欢迎分享,转载请注明来源:内存溢出
评论列表(0条)