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/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库是一个开源的C++类库集合,广泛用于开发跨平台的应用程序和服务。它包含了许多模块,如网络、数据访问、JSON解析、XML处理、加密、日志记录、线程管理和时间处理等。Poco-1.4.0-all-doc压缩包提供了该版本的...
在C++中,网络编程主要依赖于标准库中的`<iostream>`、`<sstream>`和第三方库如Boost.Asio或Poco.NET。这些库提供了处理套接字、网络连接和数据传输的功能。例如,Boost.Asio是一个强大的跨平台库,提供异步I/O操作...
编译Poco库时,需要遵循其提供的构建指南,设置正确的编译器选项,并指定目标平台和配置。 总的来说,Poco库是C++开发者的一个强大工具,它简化了常见的任务,使得开发人员可以专注于应用程序的核心逻辑,而无需从...
这款软件的核心是POCO库,它是一套强大的C++类库,为开发者提供了丰富的网络编程接口,包括HTTP、SMTP、POP3、NNTP等协议的支持。POCO库的设计理念是轻量级、高效且易于使用,使得开发人员能够快速构建跨平台的网络...
综上所述,《POCO官方资料-20章PDF》是一份全面的指南,涵盖了POCO库的各个方面,无论你是初学者还是有经验的开发者,都能从中受益,提升你的C++网络编程能力。通过深入学习这些章节,你可以熟练掌握POCO库,更好地...
10. **网络编程库的使用**:如ACE、Poco等第三方库,它们提供了丰富的网络编程接口,简化了开发过程。 总的来说,《Visual C++网络高级编程》是一本全面的指南,不仅讲解了网络编程的基本概念,还深入到高级主题,...
《VC++网络编程指南》是一份详尽的资源集合,主要针对使用Visual C++进行网络编程的开发者。这个压缩包包含了大量的信息,旨在帮助程序员深入理解和应用C++语言进行网络通信。以下是一些核心知识点的详细说明: 1. ...
7. **网络编程库**:除了底层的套接字API,还有一些高级的网络编程库,如ACE、Poco等,它们提供了一种更抽象、更易用的接口。书中可能介绍如何使用这些库简化网络编程。 8. **HTTP和FTP协议**:作为最常用的互联网...
书中还详细解析了如何利用第三方库,如Qt、Boost或Poco,来简化跨平台开发。这些库提供了一致的API,可以隐藏底层操作系统的细节,使开发者能专注于业务逻辑而不是平台兼容性。通过实例,读者可以学习如何有效地集成...
2. **C++网络库**:C++标准库并没有内置的网络支持,但书籍可能会介绍一些常用的第三方库,如ACE、Poco或Boost.Asio,这些库提供了方便的接口来处理网络通信任务。 3. **套接字编程**:详细讲解如何使用C++进行套接...
8. **第三方库**:如果POCO库没有打包在内,可能需要从外部获取并链接到项目中。 学习和使用这个项目,开发者可以熟悉POCO库的API,理解如何在Eclipse CDT中组织和管理C++项目,以及如何在Linux环境下构建和调试C++...
为此,本教程旨在提供一个全面的串口编程指南,以满足初学者的需求。 #### 串口通信基础 **RS-232C接口** 是一种历史悠久的数据传输标准,最初由美国电子工业协会(EIA)于1970年发布。该标准定义了数据终端设备...
8. **网络库的使用**:例如,Poco库提供了丰富的网络编程接口,简化了许多网络编程任务。 9. **设计模式与最佳实践**:在开发网络服务时,理解如何应用设计模式(如工厂模式、观察者模式)以及遵循最佳实践,如资源...
4. **跨平台编程**:这是指编写能够在多种操作系统上运行的代码,通常需要遵循特定的编程规范,如POSIX标准,或者使用跨平台库如Qt、Poco、Boost等。 压缩包内的文件名称列表如下: - **EpollMng.cpp**:这是一个...
- **第三方库**: 如使用Boost.ASIO或Poco等第三方库来处理复杂的网络和串口通信任务。 #### 六、示例与实践 - **编写RS232上位机程序**: 利用MSCOM控件或其他编程方法,结合前面介绍的知识点,设计并实现一个具体的...
压缩包中的“FileUtilities-A-Library-for-Reading-Flat-Files-int.pdf”可能是关于FileUtilities库的详细文档或用户指南,包含了如何使用库、API参考以及示例代码等内容。而“FileUtilities.sln.zip”可能包含了...
C++标准库并不直接支持网络编程,但可以借助第三方库,如libcurl、Boost.Asio或Poco库来实现。本项目可能使用了其中的一种或自定义的网络功能。网络编程的核心概念包括套接字(Sockets)编程,这是TCP/IP协议族的...
- **安装**:获取Poco库并按照指南配置和构建。 - **读取Excel文件**:通过`Poco::Data::Session`与ODBC(开放数据库连接)建立连接,如`Poco::Data::Session session("POCO ODBC", "Driver={Microsoft Excel ...
VC++是一个强大的C++集成开发环境,它提供了丰富的库支持,包括MFC(Microsoft Foundation Classes)和ATL(Active Template Library),使得开发者可以便捷地构建桌面应用、网络服务以及各种组件。 描述中提到,该...
在Android平台上,Poco支持使用Python进行脚本编写,这为开发者提供了灵活且功能丰富的编程环境。Python作为一种易学易用的脚本语言,拥有丰富的库和社区支持,可以方便地集成到现有的开发流程中。通过Python,...