zoukankan      html  css  js  c++  java
  • 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     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]='';
    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 }
    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     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]='';
    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 }
    client.cpp

    ok!

  • 相关阅读:
    Python 一条语句如何在多行显示的问题
    代理模式
    MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
    异步加载 Echarts图的数据
    Web页面中两个listbox的option的转移
    半透明效果
    在地图上使图片透明
    加载图片方式
    获取鼠标坐标
    画笔与画刷
  • 原文地址:https://www.cnblogs.com/book-gary/p/4229852.html
Copyright © 2011-2022 走看看