ACE_linux:UDP通信
1.涉及类
ACE_INET_Addr//ACE网络地址
ACE_SOCK_Dgram//ACE报文
2.简介
UDP通信时无需像TCP那样建立连接和关闭连接,TCP编程时需要通过accept和connect来建立连接,而UDP通信省略了这一步骤,相对来说编程更为简单。
由于UDP通信时无建立连接,服务器端不能像TCP通信那样在建立连接的时候就获得客户端的地址信息,故服务器端不能主动对客户端发送信息(不知道客户端的地址),只有等到收到客户端发送的UDP信息时才能确定客户端的地址信息,从而进行通信。
UDP通信过程如下:
l 服务器端绑定一固定UDP端口,等待接收客户端的通信。
l 客户端通过服务器的ip和地址信息直接对服务器端发送消息。
l 服务器端收到客户端发送的消息后获取客户端的ip和端口信息,通过该地址信息和客户端通信。

3.示例代码
#include <iostream>
#include "ace/SOCK_Dgram.h"
using namespace std; const int SERVER_PORT = ;
int main(int argc, char *argv[])
{
char buffer[];
ssize_t bc=; //接收的字节数
ACE_SOCK_Dgram peer;//SOCK_IO,和客户端的数据通路
ACE_Time_Value timeout(, );//TCP接受超时时间
ACE_INET_Addr remoteAddr; //所连接的远程地址 //Socket创建,绑定,监听
ACE_INET_Addr addr(SERVER_PORT);
if(peer.open(addr) != ) //绑定端口
{
cout<<"bind port fail!"<<endl;
return -;
}
cout<<"server ready. "<<endl; while(true)
{
while(true)
{
//接收数据(超时或对端断开break)
if((bc=peer.recv(buffer,,remoteAddr,,&timeout))<=)
{
break;
}
buffer[bc]='\0';
cout<<"[server rev]:>"<<buffer<<endl;
if(strcmp(buffer, "quit") == )
{
break;
} //发送数据
do
{
cout<<"[server cin]:>";
cin.getline(buffer,);
}while(strlen(buffer)<=);
peer.send(buffer, strlen(buffer),remoteAddr,,&timeout);
}
}
peer.close ();//UDP服务器用不到 return ;
}
server.cpp
#include <ace/SOCK_Dgram.h> #include <string>
#include <iostream>
using namespace std; const int SERVER_PORT = ; int main(int argc, char *argv[])
{
char buffer[];
ssize_t bc=; //接收的字节数 ACE_INET_Addr remoteAddr(SERVER_PORT,"192.168.237.128");
ACE_INET_Addr addr;
ACE_Time_Value timeout(,);
ACE_SOCK_Dgram peer(addr); cout<<"ready !"<<endl; while(true)
{
//发送数据
do
{
cout<<"[client cin]:>";
cin.getline(buffer,);
}while(strlen(buffer)<=);
peer.send(buffer, strlen(buffer),remoteAddr,,&timeout); //接收数据(超时或对端断开break)
if((bc=peer.recv(buffer,,remoteAddr,,&timeout))<=)
{
break;
}
buffer[bc]='\0';
cout<<"[client rev]:>"<<buffer<<endl;
if(strcmp(buffer, "quit") == )
{
break;
}
}
peer.close(); return ;
}
client.cpp
ok!

ACE_linux:UDP通信的更多相关文章
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- debian分区方案(就这个看着靠谱点)转
debian分区方案(就这个看着靠谱点)转 桌面系统/tmp 1G (仅用作临时文件) ext3/ext4/home Max (用户目录数据) ext3/ext4/usr 20G (软件) ext3/ ...
- 小白日记31:kali渗透测试之Web渗透-扫描工具-Arachni
扫描工具-Arachni Kali中集成旧的arachni的阉割版,所以需要重新安装[在某些方面有其独特性,但不算很强大,有命令行和web两种使用方式][匿名者推荐] apt-get update h ...
- hdu 4669 动态规划
思路:主要就是一个动态方程dp[now][(j*Exp[len[num[i]]]+num[i])%k]+=dp[pre][j];我用的是滚动数组.其实也就是dp[i][(j*Exp[len[num[i ...
- android图片压缩方法
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- Font Awesome图标字体库(2015年05月25日)
Font Awesome是一款非常棒的字体图标工具,给个地址,具体的自已慢慢去体会,只能帮你到这儿了...... http://fortawesome.github.io/Font-Awesome/ ...
- toggle
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android 线程Thread的2种实现方法
在讲解之前有以下三点要说明: 1.在Android中有两种实现线程Thread的方法: ①扩展java.long.Thread类: ②实现Runnable()接口: 2.Thread类是线程类,它有两 ...
- Learn Python The Hard Way学习笔记001
今天搜索了一下raw_input() 和 input()的区别,引用下原文部分内容 两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收).而对于 ...
- Caching和Purgeable Memory (译)
Caching和Purgeable Memory对于开发者来说是一个至关重要的资源,尤其是当我们需要处理那些需要超大内存以及计算时间的对象或者是当计算机向磁盘写入数据时导致应用程序陷入停滞时特别有用处 ...
- Quartz 第五课 SimpleTriggers 官方文档翻译
对于SimpleTrigger你需要知道它的启动总是在一个特殊的时间点或者有你设置的重复时间段中.直白来说,如果你想在2005年1月13日,正好上午11时23分54秒触发,然后执行五次,每十秒钟. 从 ...