zoukankan      html  css  js  c++  java
  • c++ poco StreamSocket tcpclient测试用例

    1.代码

    #include <iostream>
    #include "Poco/Net/Socket.h"
    #include "Poco/Net/StreamSocket.h"
    #include "Poco/Net/ServerSocket.h"
    #include "Poco/Net/SocketAddress.h"
    #include "Poco/Net/NetException.h"
    #include "Poco/Timespan.h"
    
    using Poco::Net::Socket;
    using Poco::Net::StreamSocket;
    using Poco::Net::SocketAddress;
    using Poco::Net::NetException;
    using Poco::Net::ConnectionRefusedException;
    using Poco::Net::InvalidSocketException;
    using Poco::Timespan;
    using Poco::TimeoutException;
    using Poco::IOException;
    
    const int RECV_BUF_SIZE = 64*1024; 
    const int SEND_BUF_SIZE = 64*1024;
    
    int main(int argc,char * argv[])
    {
        int n=0;
        char buffer[1024]={""};
        SocketAddress sa("127.0.0.1",5000);
        StreamSocket ss;
    
        Timespan timeout(2000000);
        try
        {
            ss.connect(sa,timeout);
        }
        catch (ConnectionRefusedException&)
        {
            std::cout<<"connect refuse"<<std::endl;
        }
        catch (NetException&)
        {   
            std::cout<<"net exception"<<std::endl;
        }
        catch (TimeoutException&)
        {
            std::cout<<"connect time out"<<std::endl;
        }
    
        //setopt timeout
        Timespan timeout3(5000000);
        ss.setReceiveTimeout(timeout3); //retn void
        Timespan timeout4(5000000);
        ss.setSendTimeout(timeout4); //retn void
        Timespan timeout0 = ss.getReceiveTimeout();
        Timespan timeout1 = ss.getSendTimeout();
        std::cout<<"Recv Timeout : "<<timeout0.totalMicroseconds()<<std::endl;  
        std::cout<<"Send Timeout : "<<timeout1.totalMicroseconds()<<std::endl;  
    
        //setopt bufsize
        ss.setReceiveBufferSize(RECV_BUF_SIZE); //retn void 
        ss.setSendBufferSize(SEND_BUF_SIZE); //retn void 
        int recv_len=ss.getReceiveBufferSize();
        int send_len=ss.getSendBufferSize();
        std::cout<<"recv buf size : "<<recv_len<<std::endl;
        std::cout<<"send buf size : "<<send_len<<std::endl;
    
        //setopt nodelay
        ss.setNoDelay(true); //retn void 
    
        try
        {
            n = ss.sendBytes("hello", 5); //block
            std::cout<<"write length : "<<n<<std::endl;
        }
        catch (TimeoutException&)
        {
            std::cout<<"send time out"<<std::endl;
        }
        catch (InvalidSocketException&)
        {
            std::cout<<"invalid socket exception"<<std::endl;
        }
        catch (IOException&)
        {
            std::cout<<"write io exception"<<std::endl;
        }
    
        while(1)
        {
            try
            {   
                if(ss.available())
                {   
                    n=0;
                    memset(buffer,0,sizeof(buffer));
                    n = ss.receiveBytes(buffer,sizeof(buffer)); //block
                    std::cout<<"recv length : "<<n<<","<<"value : "<<buffer<<std::endl;
                }
            }
            catch (TimeoutException&)
            {
                std::cout<<"recv time out"<<std::endl;
            }
            catch (InvalidSocketException&)
            {
                std::cout<<"invalid socket exception"<<std::endl;
            }
        }
    
        //Socket::poll有select poll epoll 三种模式,编译Poco库时确定。
        /*
        Timespan timer(2000000);
        Socket::SocketList readList;
        Socket::SocketList writeList;
        Socket::SocketList exceptList;
        readList.push_back(ss);
        while(1)
        {
            if(ss.poll(timer, Socket::SELECT_READ))
            {
                std::cout<<"he number of bytes available that can be read : "<<ss.available()<<std::endl;
                memset(buffer,'',sizeof(buffer));
                n = ss.receiveBytes(buffer,ss.available());
                std::cout<<"recv length : "<<n<<","<<"value : "<<buffer<<std::endl;
            }
        }   
        */
    
        ss.close();
    
        return 0;
    }

    2.编译指令

    g++ myStreamSocket.cpp -o mysocket -lPocoNet -lPocoFoundation
    • 1

    3.运行截图

    这里写图片描述

  • 相关阅读:
    [转]centos sqlite3安装及简单命令
    [转] cmake源码编译安装jsoncpp
    [转]详解Linux(centos7)下安装OpenSSL安装图文方法
    [转]curl 命令模拟 HTTP GET/POST 请求
    [转]白话HTTP短连接中的Session和Token
    [转]浅谈HTTP中GET、POST用法以及它们的区别
    [转][linux][centos]嵌入式 Linux下编译并使用curl静态库
    [转]在CentOS安装CMake (CentOS7 64位适用)
    HTTP/2 资料汇总
    Http 1.x弊端与Http 2.0比较
  • 原文地址:https://www.cnblogs.com/lidabo/p/7611961.html
Copyright © 2011-2022 走看看