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]={"\0"};
    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,'\0',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.运行截图

时间: 2024-10-30 19:28:07

c++ poco StreamSocket tcpclient测试用例的相关文章

C++ POCO库中文编程参考指南(8) 丰富的Socket编程

1 POCO 中的 Socket POCO 中有 丰富的 Socket 封装.其继承关系如下: 本文暂且只介绍 StreamSocket.ServerSocket.DatagramSocket 2 Poco::Net::ServerSocket ServerSocket 是一个封装层次比较低(low level)的 Socket,其使用的是 TCP 连接.在实际的 Server 中推荐使用 TCPServer 或 Reactor 框架.下面是例程: #include "Poco/Net/Serv

C++ POCO库中文编程参考指南(11) 如何使用Reactor框架?

1 Reactor 框架概述 POCO 中的 Reactor 框架是基于 Reactor 设计模式进行设计的.其中由 Handler 将某 Socket 产生的事件,发送到指定的对象的方法上,作为回调. 2 光说不练假把式 PoechantReactorServer 类,基本与 PoechantTCPServer: class PoechantReactorServer: public ServerApplication { public: PoechantServer() {} //: _he

POCO库中文编程参考指南(11)如何使用Reactor框架?

1 Reactor 框架概述 POCO 中的 Reactor 框架是基于 Reactor 设计模式进行设计的.其中由 Handler 将某 Socket 产生的事件,发送到指定的对象的方法上,作为回调. 2 光说不练假把式 PoechantReactorServer 类,基本与 PoechantTCPServer: class PoechantReactorServer: public ServerApplication { public: PoechantServer() {} //: _he

C++ POCO库中文编程参考指南(10) 如何使用TCPServer框架?

1 TCPServer 框架概述 POCO 库提供TCPServer框架,用以搭建自定义的 TCP 服务器.TCPServer维护一个连接队列.一个连接线程池.连接线程用于处理连接,连接线程只要一空闲就不断地从连接队列中取连接并进行处理.一旦连接线程从连接队列中取到一个连接,就会创建一个TCPServerConnection连接对象,并且调用该对象的start()方法,直到start()方法返回,这个连接对象就被删除了. 连接线程的数量是动态的,其取决于连接队列中排队的连接数.当然,你使用的时候

Windows 8开发中StreamSocket的使用

在Windows Store应用程序中使用Stram Socket与桌面客户端进行通信,一直没弄成功,总让俺觉得很震精,怎么会不成功呢.后来经过几回测试发现,原来是在DataReader那里出了问题,总算弄成了. Stream Socket通常用于传输一些比较长的数据,如文件.但这里为了使演示变得更容易理解,我传输了一段字符. 首先,我们用WinForm做一个服务器端.界面不复杂,目的是侦听连接,收到传入的客户端连接后,向客户端发送一条字符串消息. 开发中StreamSocket的使用-stre

POCO库中文编程参考指南(10)如何使用TCPServer框架?

1 TCPServer 框架概述 POCO 库提供TCPServer框架,用以搭建自定义的 TCP 服务器.TCPServer维护一个连接队列.一个连接线程池.连接线程用于处理连接,连接线程只要一空闲就不断地从连接队列中取连接并进行处理.一旦连接线程从连接队列中取到一个连接,就会创建一个TCPServerConnection连接对象,并且调用该对象的start()方法,直到start()方法返回,这个连接对象就被删除了. 连接线程的数量是动态的,其取决于连接队列中排队的连接数.当然,你使用的时候

POCO库中文编程参考指南(8)丰富的Socket编程

POCO库中文编程参考指南(8)丰富的Socket编程 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 16th, 2012 1 POCO 中的 Socket POCO 中有 丰富的 Socket 封装.其继承关系如下: 本文暂且只介绍 StreamSocket.ServerSocket.DatagramSocket 2 Poco::Net::ServerSocket S

POCO C++ SOCKET

// client program   #include "Poco/Net/DatagramSocket.h"   #include "Poco/Net/SocketAddress.h"   #include "Poco/Timestamp.h"   #include "Poco/DateTimeFormatter.h"      int testUdpClient(){       const char* ipaddr =

Poco::TCPServer框架解析

Poco::TCPServer框架解析 POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程.文件.流,网络协议包括:HTTP.FTP.SMTP 等,还提供 XML 的解析和 SQL 数据库的访问接口.不仅给我的工作带来极大的便利,而且设计巧妙,代码易读,注释丰富,也是非常好的学习材料,我个人非常喜欢.POCO的创始人在这个开源项目的基础上做了一些收费产品,也成立了自己的公司,"I am in the lucky position to w