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. debian7 oracle11g 解决 link binaries 错误方案

    ln -s /etc /etc/rc.d ln -s /usr/bin/awk /bin/awk ln -s /usr/bin/basename /bin/basename ln -s /usr/bi ...

  2. yum.pid 已被锁定

      刚刚打开虚拟机,然后打算安装sharutils 工具在安装sharutils 工具的时候 终端提示 “/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行.” r ...

  3. Windows 之 删除文件出现“该项目不在请确认该项目的位置”

    原理为通过 DOS 命令自建一个 .bat 批处理文件. 第一步,首先桌面新建TXT文档: 第二步,主要使用DEL 和 RD 命令,打开文档复制下面内容里面: DEL /F /A /Q \\?\%1 ...

  4. PHP -- four arithmetic operation

    PHP 生成 简单四则运算. Thanks for Open Source. 本代码基于 jiaych php四则运算计算函数实现. <?php /*基于jiaych php四则运算计算函数 h ...

  5. iOS通过UIAlertController弹出底部选择框来调用相机或者相册

    UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:nil message:nil preferredSt ...

  6. wxPython tools img2py

    最近在学习wxPython时,发现img2py工具只能处理单个图标,就自己写了一个简单的小工具,把文件夹下所有的图标文件转化到py文件里, 话不多说,直接上代码: # -*- coding: utf- ...

  7. [改善Java代码]不要让类型默默转换

    建议23:不要让类型默默转换 public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 100 ...

  8. asp.net mvc 的几种分页Pager

    第一种 /// <summary> /// 分页Pager显示 /// </summary> /// <param name="html">&l ...

  9. ASP常用函数

    取得IP地址 '******************************************************************* Function Userip() Dim Ge ...

  10. ifndef/define/endif作用和用法

    问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!! ------------- ...