`
Poechant
  • 浏览: 229714 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24333
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22105
社区版块
存档分类
最新评论

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

 
阅读更多

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

  • 作者:柳大·Poechant
  • 博客:Blog.CSDN.net/Poechant
  • 邮箱:zhongchao.ustc#gmail.com (# -> @)
  • 日期:April 16th, 2012

1 POCO 中的 Socket

POCO 中有 丰富的 Socket 封装。其继承关系如下:

Resize icon

本文暂且只介绍 StreamSocket、ServerSocket、DatagramSocket

2 Poco::Net::ServerSocket

ServerSocket 是一个封装层次比较低(low level)的 Socket,其使用的是 TCP 连接。在实际的 Server 中推荐使用 TCPServer 或 Reactor 框架。下面是例程:

#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/Net/StreamSocket.h"
#include <iostream>

int main(int argc, char **argv)
{

绑定端口,并开始监听:

    Poco::Net::ServerSocket srv(12345);

服务主循环:

    while (true)
    {

接受连接:

        Poco::Net::StreamSocket streamSocket = srv.acceptConnection();

向 Socket 发送数据:

        Poco::Net::SocketStream socketStream(streamSocket);
        socketStream << "HTTP/1.0 200 OK\r\n"
                     << "Content-Type: text/html\r\n"
                     << "\r\n"
                     << "<html><head><title>My 1st Web Server</title></head></html>"
                     << std::flush;
    }
    return 0;
}

3 TCPServer 框架

POCO 提供了一个 TCPServer,顾名思义,是一个 TCP 服务器。准确的说,TCPServer 是一个 Framework,要求使用 ServerSocket 去 accept 连接。并且在将 ServerSocket 转递给 TCPServer 之前必须将其设置为监听模式。

TCPServer 维护一个连接队列(connection queue)。TCPServer 开启多个线程去从连接队列中取连接并进行处理,线程的数量是动态的,与连接队列中的连接数有关。

非正常连接会被立即关闭,而不会被插入连接队列。TCPServer 的主线程负责将客户端发来的请求连接放入连接队列。

TCPServer 是一个高效的开发框框架,具体详见《POCO库中文编程参考指南(10)如何使用TCPServer框架?》一文。

4 Poco::Net::DatagramSocket

4.1 UDP Client

#include "Poco/Net/DatagramSocket.h"  
#include "Poco/Net/SocketAddress.h"  
#include "Poco/Timestamp.h"  
#include "Poco/DateTimeFormatter.h"  
#include <string>

int main()
{
    const char* ipaddr = "127.0.0.1";
    Poco::Net::SocketAddress sa("127.0.0.1", 1234);  
    Poco::Net::DatagramSocket dgs;
    dgs.connect(sa); 

    std::string syslogMsg;  
    Poco::Timestamp now;  
    syslogMsg = Poco::DateTimeFormatter::format(now, "<14>%w %f %H:%M:%S Hello,world!");  
    dgs.sendBytes(syslogMsg.data(), syslogMsg.size());  

    return 0;  
}  

不能用:

...
const char* ipaddr = "127.0.0.1";
Poco::Net::SocketAddress sa("127.0.0.1", 1234);  
Poco::Net::DatagramSocket dgs(sa);

std::string syslogMsg;  
Poco::Timestamp now; 
... 

因为 DatagramSocket(SocketAddress) 构造函数是创建一个 DatagramSocket 然后 bind()。而这里要使用的是 connect()。

4.2 UDP Server

#include "Poco/Net/DatagramSocket.h"
#include "Poco/Net/IPAddress.h"
#include <iostream>

int main(int argc, char **argv)
{
    Poco::Net::SocketAddress socketAddress(Poco::Net::IPAddress(), 1234);
    Poco::Net::DatagramSocket datagramSocket(socketAddress);

    char buffer[1024];

    while (true)
    {
        Poco::Net::SocketAddress sender;
        int n = datagramSocket.receiveFrom(buffer, sizeof(buffer) - 1, sender);
        buffer[n] = '\0';
        std::cout << sender.toString() << ": " << buffer << std::endl;
    }

    return 0;
}

5 Reactor 框架

Reactor 框架是利用 Event/Notification 实现的基于 Reactor 设计模式的一个服务器框架,由于 Event/Notification 存在而支持异步。

具体详见本博的另一篇博文《POCO库中文编程参考指南(11)如何使用Reactor框架?》

6 StreamSocket

也是一个 TCP 的 Socket,可以使数据传输操作变的简化,被用在 TCP 服务器和客户端。

-

转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant

-

分享到:
评论

相关推荐

    poco-1.4.0-all-doc poco库的文档

    Poco库是一个开源的C++类库集合,广泛用于开发跨平台的应用程序和服务。它包含了许多模块,如网络、数据访问、JSON解析、XML处理、加密、日志记录、线程管理和时间处理等。Poco-1.4.0-all-doc压缩包提供了该版本的...

    C++网络编程文档

    在C++中,网络编程主要依赖于标准库中的`&lt;iostream&gt;`、`&lt;sstream&gt;`和第三方库如Boost.Asio或Poco.NET。这些库提供了处理套接字、网络连接和数据传输的功能。例如,Boost.Asio是一个强大的跨平台库,提供异步I/O操作...

    poco-1.4.6p4.zip

    编译Poco库时,需要遵循其提供的构建指南,设置正确的编译器选项,并指定目标平台和配置。 总的来说,Poco库是C++开发者的一个强大工具,它简化了常见的任务,使得开发人员可以专注于应用程序的核心逻辑,而无需从...

    POCO 2007

    这款软件的核心是POCO库,它是一套强大的C++类库,为开发者提供了丰富的网络编程接口,包括HTTP、SMTP、POP3、NNTP等协议的支持。POCO库的设计理念是轻量级、高效且易于使用,使得开发人员能够快速构建跨平台的网络...

    POCO官方资料-20章PDF

    综上所述,《POCO官方资料-20章PDF》是一份全面的指南,涵盖了POCO库的各个方面,无论你是初学者还是有经验的开发者,都能从中受益,提升你的C++网络编程能力。通过深入学习这些章节,你可以熟练掌握POCO库,更好地...

    Visual c++网络高级编程 pdf+源代码

    10. **网络编程库的使用**:如ACE、Poco等第三方库,它们提供了丰富的网络编程接口,简化了开发过程。 总的来说,《Visual C++网络高级编程》是一本全面的指南,不仅讲解了网络编程的基本概念,还深入到高级主题,...

    vc++ 网络编程【资料大全】.rar

    《VC++网络编程指南》是一份详尽的资源集合,主要针对使用Visual C++进行网络编程的开发者。这个压缩包包含了大量的信息,旨在帮助程序员深入理解和应用C++语言进行网络通信。以下是一些核心知识点的详细说明: 1. ...

    vc网络高级编程 最新版下载

    7. **网络编程库**:除了底层的套接字API,还有一些高级的网络编程库,如ACE、Poco等,它们提供了一种更抽象、更易用的接口。书中可能介绍如何使用这些库简化网络编程。 8. **HTTP和FTP协议**:作为最常用的互联网...

    C++跨平台开发技术指南 中英文版 pdf

    书中还详细解析了如何利用第三方库,如Qt、Boost或Poco,来简化跨平台开发。这些库提供了一致的API,可以隐藏底层操作系统的细节,使开发者能专注于业务逻辑而不是平台兼容性。通过实例,读者可以学习如何有效地集成...

    Visual C++ 网络编程案例实战【高清】带书签.rar

    2. **C++网络库**:C++标准库并没有内置的网络支持,但书籍可能会介绍一些常用的第三方库,如ACE、Poco或Boost.Asio,这些库提供了方便的接口来处理网络通信任务。 3. **套接字编程**:详细讲解如何使用C++进行套接...

    poco-demo:Linux上带有Eclipse CDT的POCO C ++代码

    8. **第三方库**:如果POCO库没有打包在内,可能需要从外部获取并链接到项目中。 学习和使用这个项目,开发者可以熟悉POCO库的API,理解如何在Eclipse CDT中组织和管理C++项目,以及如何在Linux环境下构建和调试C++...

    深入浅出VC++串口编程

    为此,本教程旨在提供一个全面的串口编程指南,以满足初学者的需求。 #### 串口通信基础 **RS-232C接口** 是一种历史悠久的数据传输标准,最初由美国电子工业协会(EIA)于1970年发布。该标准定义了数据终端设备...

    CppNetworkProgramVol_1

    8. **网络库的使用**:例如,Poco库提供了丰富的网络编程接口,简化了许多网络编程任务。 9. **设计模式与最佳实践**:在开发网络服务时,理解如何应用设计模式(如工厂模式、观察者模式)以及遵循最佳实践,如资源...

    基于VC开发epoll程序方案和源码.rar

    4. **跨平台编程**:这是指编写能够在多种操作系统上运行的代码,通常需要遵循特定的编程规范,如POSIX标准,或者使用跨平台库如Qt、Poco、Boost等。 压缩包内的文件名称列表如下: - **EpollMng.cpp**:这是一个...

    深入浅出Visual+c串口编程.pdf

    - **第三方库**: 如使用Boost.ASIO或Poco等第三方库来处理复杂的网络和串口通信任务。 #### 六、示例与实践 - **编写RS232上位机程序**: 利用MSCOM控件或其他编程方法,结合前面介绍的知识点,设计并实现一个具体的...

    FileUtilities-用于将平面文件读入POCO的库

    压缩包中的“FileUtilities-A-Library-for-Reading-Flat-Files-int.pdf”可能是关于FileUtilities库的详细文档或用户指南,包含了如何使用库、API参考以及示例代码等内容。而“FileUtilities.sln.zip”可能包含了...

    C++写的即时通讯软件

    C++标准库并不直接支持网络编程,但可以借助第三方库,如libcurl、Boost.Asio或Poco库来实现。本项目可能使用了其中的一种或自定义的网络功能。网络编程的核心概念包括套接字(Sockets)编程,这是TCP/IP协议族的...

    C++打开Excel文件

    - **安装**:获取Poco库并按照指南配置和构建。 - **读取Excel文件**:通过`Poco::Data::Session`与ODBC(开放数据库连接)建立连接,如`Poco::Data::Session session("POCO ODBC", "Driver={Microsoft Excel ...

    VC++服务器

    VC++是一个强大的C++集成开发环境,它提供了丰富的库支持,包括MFC(Microsoft Foundation Classes)和ATL(Active Template Library),使得开发者可以便捷地构建桌面应用、网络服务以及各种组件。 描述中提到,该...

    Poco:基于UI检查的跨引擎测试自动化框架

    在Android平台上,Poco支持使用Python进行脚本编写,这为开发者提供了灵活且功能丰富的编程环境。Python作为一种易学易用的脚本语言,拥有丰富的库和社区支持,可以方便地集成到现有的开发流程中。通过Python,...

Global site tag (gtag.js) - Google Analytics