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通信的更多相关文章

  1. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  2. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  3. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  5. 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  6. HP-SOCKET TCP/UDP通信框架库解析

    项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...

  7. .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)

    上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...

  8. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

随机推荐

  1. 解决用ASP.NET下载文件时,文件名为乱码的问题

    关键就一句:                    string strTemp = System.Web.HttpUtility.UrlEncode(strName, System.Text.Enc ...

  2. SQLite数据库中获取新插入数据的自增长ID

    SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID. 我这里用事务,把插入和查询语句通过ExecuteReader一起提交,返回DbDataRe ...

  3. Eclipse对printf()不能输出到控制台的解决方法

    方案1: 在main 语句中加一条 setbuf(stdout,NULL); 这个即可. 在ecplise下使用cdt开发c程序,发现运行后终端没有输出,停止后会输出,通过在main中添加 setbu ...

  4. C. Fox And Names

    C. Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  5. DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry

    // 用于内部标记的空的单例对象(不支持null)protected static final Object NULL_OBJECT = new Object(); // 缓存单例对象根据beanNa ...

  6. nodejs的mysql模块学习(三)数据库连接配置选项详解

    连接选项 当在创建数据连接的时候 第一种大多数人用的方法 let mysql = require('mysql'); let connection = mysql.createConnection({ ...

  7. Android(java)学习笔记90:泛型类的概述和使用

    用法一: 下面我们首先定义泛型类: package cn.itcast_04; /* * 泛型类:把泛型定义在类上 */ public class ObjectTool<T> { //这里 ...

  8. Maven 仓库

    Maven仓库分为本地仓库和远程仓库(中央仓库,私服,其他公共仓库)一张图就可以很清楚的看出结构 本地仓库:本地仓库是在我们当前电脑系统盘的user-administrator-m2-reposito ...

  9. C中的回调函数

    C语言中应用回调函数的地方非常多,如Nginx中: struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_c ...

  10. linux 基本命令 [转]

    linux 基本命令 1.ls  (list 显示当前目录下文件和目录 ls -l 详细显示 =ll ) [root@linux ~]# ls [-aAdfFhilRS] 目录名称 [root@lin ...