转载于:http://www.cnblogs.com/TianFang/archive/2006/12/07/585205.html

udp是一种无连接的协议,提供无连接不可靠的服务。

在ace中,通过ACE_SOCK_Dgram类提供udp通信服务,ACE_SOCK_Dgram和ACE_SOCK_Stream的API非常类似,一样提供了send,recv及close等常用操作,这里就不再累述了。

udp通信时无需像tcp那样建立连接和关闭连接,tcp编程时需要通过accept和connect来建立连接,而udp通信省略了这一步骤,相对来说编程更为简单。

由于udp通信时无建立连接,服务器端不能像Tcp通信那样在建立连接的时候就获得客户端的地址信息,故服务器端不能主动对客户端发送信息(不知道客户端的地址),只有等到收到客户端发送的udp信息时才能确定客户端的地址信息,从而进行通信。

udp通信过程如下:

  1. 服务器端绑定一固定udp端口,等待接收客户端的通信。
  2. 客户端通过服务器的ip和地址信息直接对服务器端发送消息。
  3. 服务器端收到客户端发送的消息后获取客户端的ip和端口信息,通过该地址信息和客户端通信。

下面代码为EchoServer的udp版:

 //server.cpp
#include <ace/SOCK_Dgram.h>
#include <ace/INET_Addr.h>
#include <ace/Time_Value.h> #include <string>
#include <iostream>
using namespace std; int main(int argc, char *argv[])
{
ACE_INET_Addr port_to_listen(); //绑定的端口
ACE_SOCK_Dgram peer(port_to_listen); //通信通道 char buf[];
while(true)
{
ACE_INET_Addr remoteAddr; //所连接的远程地址
int bc = peer.recv(buf,,remoteAddr); //接收消息,获取远程地址信息
if( bc != -)
{
string s(buf,bc);
cout<<endl<<"rev:\t"<<s<<endl;
}
peer.send(buf,bc,remoteAddr); //和远程地址通信
} return ;
}

相应的客户端程序如下:

 //client.cpp
#include <ace/SOCK_Dgram.h>
#include <ace/INET_Addr.h>
#include <ace/Time_Value.h> #include <string>
#include <iostream>
using namespace std; int main(int argc, char *argv[])
{
ACE_INET_Addr remoteAddr(,"127.0.0.1"); //所连接的远程地址
ACE_INET_Addr localAddr; //本地地址信息 ACE_SOCK_Dgram peer(localAddr); //通信通道 peer.send("hello",,remoteAddr); //发送消息 char buf[];
int bc = peer.recv(buf,,remoteAddr); //接收消息
if( bc != -)
{
string s(buf,bc);
cout<<endl<<"rev:\t"<<s<<endl;
} return ;
}

和tcp编程相比,udp无需通过acceptor,connector来建立连接,故代码相对tcp编程来说要简单许多。另外,由于udp是一种无连接的通信方式,ACE_SOCK_Dgram的实例对象中无法保存远端地址信息(保存了本地地址信息),故通信的时候需要加上远端地址信息。

ACE中UDP通信的更多相关文章

  1. ACE中TCP通信

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/07/585095.html 概述: 传输控制协议TCP(Transmission Contro ...

  2. LabVIEW中的UDP通信

    UDP(user datagram protoco1)提供向接收端发送信息的最简便的协议,与TCP不同,UDP不是面向连接的可靠数据流传输协议,而是面向操作的不可靠数据流传输协议.UDP在数据传输之前 ...

  3. (转) 在linux网络UDP通信中,关于客户端是否绑定的理解

    最近在做一个实例,是用RTSP协议完成.服务器已经有了,只需要把客户端做好就行了,在做的过程中发现了一些问题,就是关于UDP客户端是否绑定的问题. 也许大家在书上看到的大多都是说UDP客户端不需要绑定 ...

  4. TCP/UDP通信中server和client是如何知道对方IP地址的

    在TCP通信中 client是主动连接的一方,client对server的IP的地址提前已知的.如果是未知则是没办法通信的. server是在accpet返回的时候知道的,因为数据包中包含客户端的IP ...

  5. C#中使用UDP通信

    UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据. 服务器端代码: static void Main(string[]  ...

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

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

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

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

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

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

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

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

随机推荐

  1. 一步一步图文介绍SpriteKit使用TexturePacker导出的纹理集Altas

    1.为什么要使用纹理集? 游戏是一种很耗费资源的应用,特别是在移动设备中的游戏,性能优化是非常重要的 纹理集是将多张小图合成一张大图,使用纹理集有以下优点: 1.减少内存占用,减少磁盘占用: 2.减少 ...

  2. Android softkeyboard 和 其他界面关系 softInputMode

    转 : http://blog.csdn.net/xww810319/article/details/17397429 and http://blog.csdn.net/harryweasley/ar ...

  3. TW实习日记:第26天

    这周组长休年假去了,并且之前主要负责的项目也已经上线了,可以说没那么忙了,手头就一个协助别的组做的移动端项目.可是这个项目特别坑,由于网端是9年前的项目,导致后台的接口有非常多的问题,并且入参多得令人 ...

  4. JAVA基础:ArrayList和LinkedList区别

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList ...

  5. ACM入门步骤(一)

    一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...

  6. eg_4

    4. 编写一个程序,要求以树状结构展现特定的文件夹及其子文件(夹) import java.io.*; public class Test { public static void main(Stri ...

  7. TCP系列33—窗口管理&流控—7、Silly Window Syndrome(SWS)

    一.SWS介绍 前面我们已经通过示例看到如果接收端的应用层一直没有读取数据,那么window size就会慢慢变小最终可能变为0,此时我们假设一种场景,如果应用层读取少量数据(比如十几bytes),接 ...

  8. lol人物模型提取(三)

      提取出来的lol人物模型能让你知道一些有趣的信息,比如说给英雄量个身高啥的.   经测量,佐伊的身高应大于1m60,比想象中的着实高不少啊.   然后还应该把这个模型镜像对称一下,在3dsmax里 ...

  9. opencv2.4.0版本不支持Mat的大小自动调整?

    在opencv2.4.9中,resize(img,img,Size(850,550))是没问题的.到了2.4.0中,要新声明一个变量Mat img1;resize(img,img1,Size(850, ...

  10. Sitemesh小记

    一.前言 因参与公司框架改造,接触到了Sitemesh这个用于网页布局和修饰的框架,因之前没有接触过(汗颜),但是发现其小巧好用,便以此文记之~ 二.正文 Sitemesh有什么作用呢?我相信很多人在 ...