首页 > 代码库 > ACE_linux:UDP通信
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" 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]=‘\0‘;33 cout<<"[server rev]:>"<<buffer<<endl;34 if(strcmp(buffer, "quit") == 0) 35 {36 break; 37 }38 39 //发送数据40 do41 {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服务器用不到49 50 return 0; 51 }
1 #include <ace/SOCK_Dgram.h> 2 3 #include <string> 4 #include <iostream> 5 using namespace std; 6 7 const int SERVER_PORT = 3000 ; 8 9 int main(int argc, char *argv[]) 10 {11 char buffer[1024];12 ssize_t bc=0; //接收的字节数13 14 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);18 19 cout<<"ready !"<<endl;20 21 while(true)22 {23 //发送数据24 do25 {26 cout<<"[client cin]:>";27 cin.getline(buffer,1024);28 }while(strlen(buffer)<=0); 29 peer.send(buffer, strlen(buffer),remoteAddr,0,&timeout); 30 31 //接收数据(超时或对端断开break)32 if((bc=peer.recv(buffer,1024,remoteAddr,0,&timeout))<=0) 33 {34 break; 35 }36 buffer[bc]=‘\0‘;37 cout<<"[client rev]:>"<<buffer<<endl;38 if(strcmp(buffer, "quit") == 0) 39 {40 break; 41 }42 }43 peer.close();44 45 return 0; 46 }
ok!
ACE_linux:UDP通信
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。