当前位置:首页 > 操作系统 > Linux

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.示例代码

技术分享 技术分享
                 1 #include <iostream>
 2 #include "ace/SOCK_Dgram.h" 3usingnamespace std;
 4 5constint  SERVER_PORT = 3000 ;
 6int main(int argc, char *argv[]) 
 7{
 8char 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;    //所连接的远程地址
1314//Socket创建,绑定,监听15    ACE_INET_Addr addr(SERVER_PORT);
16if(peer.open(addr) != 0)     //绑定端口17    {
18         cout<<"bind port fail!"<<endl;
19return -1;
20    }
21     cout<<"server ready. "<<endl;
2223while(true)
24    {
25while(true)
26        {
27//接收数据(超时或对端断开break)28if((bc=peer.recv(buffer,1024,remoteAddr,0,&timeout))<=0)    
29            {
30break;  
31            }
32             buffer[bc]=;
33             cout<<"[server rev]:>"<<buffer<<endl;
34if(strcmp(buffer, "quit") == 0)  
35            {
36break;  
37            }
3839//发送数据40do41            {
42                 cout<<"[server cin]:>";
43                 cin.getline(buffer,1024);
44             }while(strlen(buffer)<=0); 
45             peer.send(buffer, strlen(buffer),remoteAddr,0,&timeout);    
46        }
47    }
48     peer.close ();//UDP服务器用不到4950return0; 
51 }
server.cpp
技术分享 技术分享
                 1 #include <ace/SOCK_Dgram.h> 
 2 3 #include <string>
 4 #include <iostream>
 5usingnamespace std;
 6 7constint  SERVER_PORT = 3000 ;
 8 9int main(int argc, char *argv[]) 
10{
11char buffer[1024];
12     ssize_t bc=0;            //接收的字节数1314     ACE_INET_Addr remoteAddr(SERVER_PORT,"192.168.237.128");
15    ACE_INET_Addr addr;
16     ACE_Time_Value timeout(100,0);
17    ACE_SOCK_Dgram  peer(addr);
1819     cout<<"ready !"<<endl;
2021while(true)
22    {
23//发送数据24do25        {
26             cout<<"[client cin]:>";
27             cin.getline(buffer,1024);
28         }while(strlen(buffer)<=0); 
29         peer.send(buffer, strlen(buffer),remoteAddr,0,&timeout);    
3031//接收数据(超时或对端断开break)32if((bc=peer.recv(buffer,1024,remoteAddr,0,&timeout))<=0)    
33        {
34break;  
35        }
36         buffer[bc]=;
37         cout<<"[client rev]:>"<<buffer<<endl;
38if(strcmp(buffer, "quit") == 0)  
39        {
40break;  
41        }
42    }
43    peer.close();
4445return0; 
46 }
client.cpp

 

ok!

技术分享

原文:http://www.cnblogs.com/book-gary/p/4230229.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!