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.示例代码
1 #include <iostream> 2 #include "ace/SOCK_Dgram.h" 3 using namespace std; 4 5 const int SERVER_PORT = 3000 ; 6 int main(int argc, char *argv[]) 7 { 8 char buffer[1024]; 9 ssize_t bc=0; //接收的字节数 10 ACE_SOCK_Dgram peer;//SOCK_IO,和客户端的数据通路 11 ACE_Time_Value timeout(100, 0);//TCP接受超时时间 12 ACE_INET_Addr remoteAddr; //所连接的远程地址 13 14 //Socket创建,绑定,监听 15 ACE_INET_Addr addr(SERVER_PORT); 16 if(peer.open(addr) != 0) //绑定端口 17 { 18 cout<<"bind port fail!"<<endl; 19 return -1; 20 } 21 cout<<"server ready. "<<endl; 22 23 while(true) 24 { 25 while(true) 26 { 27 //接收数据(超时或对端断开break) 28 if((bc=peer.recv(buffer,1024,remoteAddr,0,&timeout))<=0) 29 { 30 break; 31 } 32 buffer[bc]='