導航:首頁 > 編程語言 > poco庫中文編程參考指南

poco庫中文編程參考指南

發布時間:2022-12-29 11:35:36

A. POCO庫中文編程參考指南(10)如何使用TCPServer框架

Author: 柳大·Poechant(鍾超)Email: [email protected]: Blog.CSDN.net/PoechantDate: April 21th, 20121 TCPServer 框架概述POCO 庫提供TCPServer框架,用以搭建自定義的 TCP 伺服器。TCPServer維護一個連接隊列、一個連接線程池。連接線程用於處理連接,連接線程只要一空閑就不斷地從連接隊列中取連接並進行處理。一旦連接線程從連接隊列中取到一個連接,就會創建一個TCPServerConnection連接對象,並且調用該對象的start()方法,直到start()方法返回,這個連接對象就被刪除了。連接線程的數量是動態的,其取決於連接隊列中排隊的連接數。當然,你使用的時候可以設定連接隊列的最大容量,以防止在高並發應用的伺服器上出現連接太多而使連接隊列溢出的悲劇發生。當連接隊列滿了,卻還有新的連接到來時,新來的連接就會被立即悄無聲息地關閉。// PoechantTCPConnection.h #ifndef POECHANT_TCP_CONNECTION_H #define POECHANT_TCP_CONNECTION_H #include "Poco/Net/TCPServerConnection.h" #include "Poco/Net/StreamSocket.h" #include class PoechantTCPConnection: public TCPServerConnection { public: PoechantTCPConnection(const StreamSocket& s, const std::string& arg1, int arg2, double arg3); void run(); private: std::string _arg1; int _arg2; double _arg3; }; #endif 實現如下:// PoechantTCPConnection.cpp #include "PoechantTCPConnection.h" #include "Poco/Util/Application" #include "Poco/Timestamp.h" #include "Poco/Exception.h" #include "Poco/DateTimeFormatter.h" PoechantTCPConnection(const StreamSocket& s, const std::string& arg1, int arg2, double arg3): TCPServerConnection(s), _arg1(arg1), _arg2(arg2), _arg3(arg3) { } void run() { Application& app = Application::instance(); // 日誌輸出連接的TCP用戶的地址(IP和埠) app.logger().information("Request from " + this->socket().peerAddress().toString()); try { // 向客戶端發送數據,這里以發送一個表示時間的字元串為例 Timestamp now; std::string dt(DateTimeFormatter::format(now, _format)); dt.append("\r\n"); socket().sendBytes(dt.data(), (int) dt.length()); } catch (Poco::Exception& e) { app.logger().log(e); } } 2.3 PoechantTCPConnectionFactory工廠模式不必多說,名字唬人,其實非常非常簡單(准確的說設計模式大部分名字都唬人,但大部分都很有用,設計模式本身並不牛B,能把設計模式抽象提煉出來成我們現在認為很簡單的這些模式的那幾個人很牛B)。

B. 怎麼在mingw環境下編譯安裝poco庫

.vs編譯安裝的話,直接運行那些bat腳本就可以了,但MinGW肯定不行,所以需要用到MSYS
2.解壓poco-1.4.6p2,比如:D:/mysdk/poco-1.4.6p2,在MSYS的命令行中輸入「cd
/d/mysdk/poco-1.4.6p2」回車,就到了poco-1.4.6p2的解壓目錄了,具體你解壓的目錄路徑可以根據實際情況修改;

3.configure poco-1.4.6p2

linux裡面要配置編譯參數,我們可以通過「./configure
--help」查看有哪些編譯項。我們要使用MinGW編譯poco就必須在configure時指明是MinGW,我的configure命令如下(大家根據自己的實際情況修改):

./configure --config=MinGW --shared --static --no-test --no-samples
--omit=Crypto,NetSSL_OpenSSL,Data/ODBC,Data/MySQL

簡單解釋:--config=MinGW表示我採用MinGW編譯poco,--shared
--static表示編譯生成動態庫(dll)和靜態庫(a),omit=...表示編譯時不生成這些庫,因為我本機沒裝ssl、mysql,odbc需要lib,會影響我編譯,所以我去掉了這4個庫;

4.修改MinGW的編譯腳本

修改poco-1.4.6p2/bulid/config/MinGW,把「SYSLIBS = -L/usr/local/lib -L/usr/lib
-liphlpapi -lws2_32 -lssl -lcrypto -lws2_32 -lgdi32」里去掉「-lssl
-lcrypto」,因為我本機沒裝ssl,這個庫沒有,會影響編譯安裝;

5.make編譯

執行了上面的./configure
--config=......的命令後會生成一個config.make文件,然後輸入「make」並回車,就開始編譯安裝poco了,poco編譯過程會有一些提示錯誤,例如「poco-1.4.6p2/.../xxx.exe.exe:No
such file」,如果是的話就不用管他,繼續輸入make回車,他會繼續往下編譯,大概經過N次這樣的操作後,提示「make[1]:Nothing to be
done for 'all'.」的時候就編譯完了。

編譯完成後,在poco-1.4.6p2/lib/MinGW/ia32/目錄下就是編譯出來的靜態度和動態庫了。

C. 如何在poco庫中編寫xml的文檔

XML是純文本文件,用記事本即可打開編輯,在WORD裡面也可以打開編輯。
不過XML本身是沒有格式的,只能編輯裡面的文字。

D. vs2010怎麼安裝poco庫

安裝步驟:
1. 下載源碼包。在POCO的官方網站下載最新的POCO源碼包。http://pocoproject.org/download/index.html
2.解壓源碼包。下載的文件名是「poco-1.4.2.zip」,將其解壓在F:\POCO目錄下。
3.編譯庫文件。開始菜單–Microsoft Visual Studio 2010–Visual Studio Tools—Open Visual Studio 2010 Command Prompt 打開命令行窗口。cd命令進入poco根目錄,F:\POCO\poco-1.4.2。輸入命令:buildwin 100 回車。
4.等待編譯完成,花費了一個多小時。
5.設置環境變數。POCO_HOME F:\POCO\poco-1.4.2
6.添加Include目錄。打開工程屬性頁,在「Configuration Properties -> C/C++ -> General -> Additional Include Directories」欄目中添加「$(POCO_HOME)\Foundation\include」,確認並應用該設置。
7.添加lib鏈接庫。打開屬性頁,在「Configuration Properties -> Linker -> General -> Additional Library Directories」欄目中添加lib目錄路徑$(POCO_HOME)\lib。在「Configuration Properties -> Linker -> Input -> Additional Dependencies」中添加應用程序需要用到的lib文件。
8.更改輸出路徑,以便項目生成的應用程序能夠調用DLL文件。打開工程屬性,將「Configuration Properties -> General -> Output Directory」改為「$(POCO_HOME)\bin」;將「Configuration Properties -> Debugging -> Working Directory」改為「$(OutDir)」。
9.設置完成後,重啟Visual Studio。

E. C++ POCO庫中文編程參考指南(11) 如何使用Reactor框架

1 Reactor 框架概述POCO 中的 Reactor 框架是基於 Reactor 設計模式進行設計的。其中由 Handler 將某 Socket 產生的事件,發送到指定的對象的方法上,作為回調。2 光說不練假把式PoechantReactorServer 類,基本與 PoechantTCPServer: class PoechantReactorServer: public ServerApplication { public: PoechantServer() {} //: _helpRequested(false) {} ~PoechantServer() {} protected: void initialize(Application& self) { loadConfiguration(); ServerApplication::initialize(self); } void uninitialize() { ServerApplication::uninitialize(); } int main(const std::vector& args) { // … return Application::EXIT_OK; } }PoechantServiceHandler 類定義如下。 class PoechantServiceHandler { public: PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor); ~PoechantServiceHandler(); void onReadable(const AutoPtr& pNf); void onShutdown(const AutoPtr& pNf); private: enum { BUFFER_SIZE = 1024 }; StreamSocket _socket; SocketReactor& _reactor; char *_pBuffer; };PoechantServiceHandler 實現: PoechantServiceHandler::PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor) :_socket(socket), _reactor(reactor), _pBuffer(new char[BUFFER_SIZE]) { Application& app = Application::instance(); app.logger().information("Connection from" + socket.peerAddress().toString()); _reactor.addEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onReadable)); _reactor.addEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onShutdown)); } ~PoechantServiceHandler() { Application& app = Application::instance(); app.logger().information("Disconnecting " + _socket.peerAddress().toString()); _reactor.removeEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onReadable)); _reactor.removeEventHandler(_socket, NObserver(*this, &PoechantServiceHandler::onShutdown)); delete [] _pBuffer; } void onReadable(const AutoPtr& pNf) { // Receive data from StreamSocket int n = _socket.receiveBytes(_pBuffer, BUFFER_SIZE); // Send data back the client if (n > 0) _socket.sendBytes(_pBuffer, n); else delete this; } // When ShutdownNotification is detected, this method will be invoked. void onShutdown(const AutoPtr& pNf) { delete this; }啟動: int main(const std::vector& args) { unsigned short port = (unsigned short) config().getInt("PoechantReactor.port", 12345); ServerSocket serverSocket(port); SocketReactor reactor; SocketAcceptor acceptor(serverSocket, reactor); reactor.run(); waitForTerminationRequest(); reactor.stop(); return Application::EXIT_OK; } int main(int argc, char **argv) { return PoechantServer().run(argc, argv); }3 Clinet 測試代碼同《POCO庫中文編程參考指南(10)如何使用TCPServer框架?

F. POCO怎麼使用

下載軟體,注冊後輸入帳號登陸,可以通過搜索、查找,再下載、也可以聊天等等。

閱讀全文

與poco庫中文編程參考指南相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163