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 do 40 { 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 do 27 { 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
时间: 2024-10-14 17:26:04