首页 > 代码库 > ACE_linux:TCP通信

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

技术分享
 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     ACE_SOCK_Stream peer;//SOCK_IO,和客户端的数据通路10     ACE_Time_Value timeout(100, 0);//TCP接受超时时间11 12     //Socket创建,绑定,监听13     ACE_INET_Addr addr(SERVER_PORT);14     ACE_SOCK_Acceptor acceptor;15     if(acceptor.open(addr) != 0)     //绑定端口16     {17         cout<<"bind port fail!"<<endl;18         return -1;19     }20     cout<<"server ready. "<<endl;21 22     while(true)23     {24         if (acceptor.accept(peer) != -1)    //建立和客户端的连接25         {26             std::cout<<"client connect. "<<std::endl;27             while(true)28             {29 30                 if(peer.recv(buffer,1024,&timeout)<=0)    //接收数据(超时或对端断开break)31                 {32                     break;  33                 }34                 cout<<"[server rev]:>"<<buffer<<endl;35                 if(strcmp(buffer, "quit") == 0)  36                 {37                     break;  38                 }39                 do40                 {41                     cout<<"[server cin]:>";42                     cin.getline(buffer,1024);43                 }while(strlen(buffer)<=0); 44                 peer.send(buffer, strlen(buffer));    //发送数据45 46             }47             peer.close ();48         }49     }50 51     return 0; 52 }
server.cpp
技术分享
 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 13     ACE_INET_Addr addr(3000,"192.168.237.128");14     ACE_Time_Value timeout(100,0);15     ACE_SOCK_Stream peer;16     ACE_SOCK_Connector connector;17     if(connector.connect(peer,addr,&timeout) != 0)18     {19         cout<<"connection failed !"<<endl;20         return -1;21     }22     cout<<"conneced !"<<endl;23 24     while(true)25     {26         do27         {28             cout<<"[client cin]:>";29             cin.getline(buffer,1024);30         }while(strlen(buffer)<=0); 31         peer.send(buffer, strlen(buffer));    //发送数据32 33         if(peer.recv(buffer,1024,&timeout)<=0)    //接收数据(超时或对端断开break)34         {35             break;  36         }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 }
client.cpp

 

ACE_linux:TCP通信