ACE_linux:TCP通信
1.涉及类
ACE_INET_Addr//ACE网络地址
ACE_SOCK_Acceptor//ACE网络服务器
ACE_SOCK_Connector//ACE网络客户端
ACE_SOCK_Stream//ACE数据流
2.简介
TCP通讯
传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。
Tcp通信过程一般为如下步骤:
a) 服务器绑定端口,等待客户端连接。
b) 客户端通过服务器的ip和服务器绑定的端口连接服务器。
c) 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。
3.示例代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include "ace/SOCK_Acceptor.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_Stream peer;//SOCK_IO,和客户端的数据通路 11 ACE_Time_Value timeout(100, 0);//TCP接受超时时间 12 13 //Socket创建,绑定,监听 14 ACE_INET_Addr addr(SERVER_PORT); 15 ACE_SOCK_Acceptor acceptor; 16 if(acceptor.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 if (acceptor.accept(peer) != -1) //建立和客户端的连接 26 { 27 std::cout<<"client connect. "<<std::endl; 28 while(true) 29 { 30 31 if((bc=peer.recv(buffer,1024,&timeout))<=0) //接收数据(超时或对端断开break) 32 { 33 break; 34 } 35 buffer[bc]='\0'; 36 cout<<"[server rev]:>"<<buffer<<endl; 37 if(strcmp(buffer, "quit") == 0) 38 { 39 break; 40 } 41 do 42 { 43 cout<<"[server cin]:>"; 44 cin.getline(buffer,1024); 45 }while(strlen(buffer)<=0); 46 peer.send(buffer, strlen(buffer)); //发送数据 47 48 } 49 peer.close (); 50 } 51 } 52 53 return 0; 54 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <ace/SOCK_Connector.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 addr(3000,"192.168.237.128"); 15 ACE_Time_Value timeout(100,0); 16 ACE_SOCK_Stream peer; 17 ACE_SOCK_Connector connector; 18 if(connector.connect(peer,addr,&timeout) != 0) 19 { 20 cout<<"connection failed !"<<endl; 21 return -1; 22 } 23 cout<<"conneced !"<<endl; 24 25 while(true) 26 { 27 do 28 { 29 cout<<"[client cin]:>"; 30 cin.getline(buffer,1024); 31 }while(strlen(buffer)<=0); 32 peer.send(buffer, strlen(buffer)); //发送数据 33 34 if((bc=peer.recv(buffer,1024,&timeout))<=0) //接收数据(超时或对端断开break) 35 { 36 break; 37 } 38 buffer[bc]='\0'; 39 cout<<"[client rev]:>"<<buffer<<endl; 40 if(strcmp(buffer, "quit") == 0) 41 { 42 break; 43 } 44 } 45 peer.close(); 46 47 return 0; 48 }
ok!