//与流包装不同,ACE_SOCK_Dgram是非面向连接的协议,因此不存在设置连接的接受器和连接器
//通信通过一系列的发送和接收来完成。每个send()都要指定目的远地地址作为参数
//ACE_LSOCK_Dgram与ACE_SOCK_Dgram类似,唯一不同的是ACE_LSOCK_Dgram要用ACE_UNIX_Addr类作为地址,而不是ACE_INET_Addr
#pragma comment(lib,"ACEd.lib")
#include "ace/SOCK_Dgram.h"
#include "ace/Log_Msg.h"
#include "ace/INET_Addr.h"
#define DATA_BUFFER_SIZE 1024
#define SIZE_DATA 19
#define SLEEP_TIME 5
class UDP_Server
{
private:
char *buf_data;
char *buf_back;
ACE_SOCK_Dgram new_data;
ACE_INET_Addr local_addr;
ACE_INET_Addr remote_addr;
public:
UDP_Server(int local_port):local_addr(local_port),new_data(local_addr)
{
if((buf_data=new char[DATA_BUFFER_SIZE])==NULL)
ACE_DEBUG((LM_ERROR,"<%P|%t>%p\n","申请内存空间失败"));
buf_back=new char[DATA_BUFFER_SIZE];
ACE_OS::sprintf(buf_back,"消息已收到");
}
int accept_data()
{
//监听端口
//new_data.
// if(new_data.open(local_addr)==-1)
// ACE_ERROR_RETURN((LM_ERROR,"<%P|%t>%p\n","监听端口失败"),-1);
// ACE_DEBUG((LM_ERROR,"<%P|%t>端口%d监听成功\n",local_addr.get_port_number()));
//接收数据
int byte_count=0;
while(1)
{
ACE_DEBUG((LM_DEBUG,"<%P|%t>%s\n","等待接收UDP数据包"));
if((byte_count=new_data.recv(buf_data,SIZE_DATA,remote_addr))==-1)
{
ACE_DEBUG((LM_DEBUG,"<%P|%t>%p\n","接收失败"));
ACE_OS::sleep(SLEEP_TIME);
continue;
}
else
{
buf_data[byte_count]='\0';
ACE_DEBUG((LM_ERROR,"<%P|%t>%s%s:%d\n","成功接收数据,来自:",remote_addr.get_host_addr(),remote_addr.get_port_number()));
ACE_DEBUG((LM_ERROR,"<%P|%t>%s\n消息字节数:%d\n","the message is:%s\n",buf_data,ACE_OS::strlen(buf_data)));
break;
}
}
back_message();
return 0;
}
int back_message()
{
//给远地主机反馈信息
if(new_data.send(buf_back,sizeof(buf_back)+1,remote_addr)==-1)
ACE_ERROR_RETURN((LM_ERROR,"%p\n","反馈信息失败"),-1);
else
ACE_DEBUG((LM_DEBUG,"%s\n","反馈信息成功"));
return 0;
}
};
int ACE_TMAIN(int,ACE_TCHAR *[])
{
UDP_Server udp_server_1(6000);
// if(udp_server_1.accept_data()==0)
// udp_server_1.back_message();
udp_server_1.accept_data();
system("pause");
return 0;
}
simple_UDP_DATA.zip_ACE
版权申诉
156 浏览量
2022-09-14
20:20:24
上传
评论
收藏 2.58MB ZIP 举报
Kinonoyomeo
- 粉丝: 74
- 资源: 1万+
最新资源
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
- VoLTE高丢包优化指导书.xlsx
- Rust资源文件.zip
- 前后端分离实践:使用 React 和 Express 搭建完整登录注册流程
- gradle-publish-to-MavenLocal.zip
- 10份网络优化创新案例.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0