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 ...
随机推荐
- memcache 存储session
php使用memcache存储session http://blog.csdn.net/weilee2009/article/details/7658260
- 在Linux里读取UBOOT环境变量
转载:http://falloutmx.blog.163.com/blog/static/39236020201211145010154/ 可以通过mtd方式读取,也可以用ioremap方式.不过这些 ...
- CentOS 安装中文输入法
转载:http://blog.sina.com.cn/s/blog_9f1c093101019h03.html centos 6.3用yum安装中文输入法 1.需要root权限,所以要用root登录 ...
- Android(java)学习笔记116:PC_Phone通信程序报错
1.首先我写的程序代码如下: package com.himi.udpsend; import java.net.DatagramPacket; import java.net.DatagramSoc ...
- ASP.NET MVC and jqGrid 学习笔记 3-如何从数据库获得数据
实际应用中,大部分都是从数据库里获得数据,所以先建立一个数据库,Database first 或者Code first都可以,这里用Code first. 一.Model public class M ...
- uva 784 Maze Exploration 染色 搜索水题 DFS
染色问题,其实就是看看图上某一点能扩散多少. 用DFS解决,因为BFS不是很熟 =-=...以后要多练. 提交后32ms,优化了一下,在递归前进行判定,优化到22ms,不是优化的很好... 代码: # ...
- agile学习
https://www.flickr.com/photos/codingthearchitecture/sets/
- [改善Java代码]Java的泛型是类型擦除的
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...
- [改善Java代码]推荐覆写toString方法
建议49: 推荐覆写toString方法 为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码: public ...
- 关于Hadoop之父Doug Cutting
生活中,可能所有人都间接用过他的作品,他是Lucene.Nutch .Hadoop等项目的发起人.是他,把高深莫测的搜索技术形成产品,贡献给普罗大众:还是他,打造了目前在云计算和大数据领域里如日中天的 ...