• 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!

  • 相关阅读:
    【C#】最完整的IIS添加WCF配置
    IIS配置中增加对WCF程序的支持svc(IIS10中添加WCF支持几种方法小结)
    ASP.NET C#各种数据库连接字符串大全——SQLServer、Oracle、Access
    记一次 .NET 某医院HIS系统 CPU爆高分析(Windbg)
    C#调用Win32 API 的方法
    闲无聊,发个winform中使用html编辑器的方案
    使用非托管 DLL 函数
    flask中的CBV和FBV
    2.6 CSS3其他特性(了解)
    2.5 CSS3盒子模型
  • 原文地址:https://www.cnblogs.com/book-gary/p/4229852.html
Copyright © 2020-2023  润新知