簡體   English   中英

winsock2的替代品,c ++中的示例服務器源代碼

[英]alternatives to winsock2 with example server source in c++

我正在使用http://tangentsoft.net/wskfaq/examples/basics/select-server.html上的這個示例實現

這正在做我需要的大部分工作,處理連接而不會阻塞,並且所有工作都在其線程中(不像某些示例那樣為每個連接創建新線程),但我擔心因為我被告知winsock只會支持最多64個客戶端連接:S

這64個連接是真的嗎?

我還有其他選擇嗎? 為類似的實現提供一個c ++示例會很酷。

謝謝

替代圖書館:

你應該考慮使用boost asio 它是一個跨平台的網絡庫,簡化了您可能需要完成的許多任務。

您可以在此處找到您尋找的示例源代碼


關於64限制:

通過良好的設計,您將體驗到64硬連接限制。 基本上,如果您使用某種線程模型,您將不會遇到此限制。

以下是您聽到的限制的一些信息:

4.9 - “64插座”限制是什么?

有兩個64插槽限制:

Win32事件機制(例如WaitForMultipleObjects())一次只能等待64個事件對象。 Winsock 2提供了WSAEventSelect()函數,它允許您使用Win32的事件機制來等待套接字上的事件。 因為它使用Win32的事件機制,所以您一次只能等待64個套接字上的事件。 如果要一次等待超過64個Winsock事件對象,則需要使用多個線程,每個線程等待不超過64個套接字。

select()函數在某些情況下也限制為一次等待64個套接字。 winsock.h中定義的FD_SETSIZE常量確定傳遞給select()的fd_set結構的大小。 它默認定義為64.您可以在#include winsock.h之前將此常量定義為更高的值,這將覆蓋默認值。 不幸的是,至少有一個非Microsoft Winsock堆棧和一些分層服務提供商假設默認值為64; 在較大的fd_sets中,它們將忽略超過64位的套接字。

您可以編寫一個測試程序,在您計划支持的系統上嘗試此操作,以查看它們是否不受限制。 如果是,您可以使用線程來解決這個問題,就像使用事件對象一樣。

資源

@布賴恩:

                if ((gConnections.size() + 1) > 64) {
                    // For the background on this check, see
                    // www.tangentsoft.net/wskfaq/advanced.html#64sockets
                    // The +1 is to account for the listener socket.
                    cout << "WARNING: More than 63 client "
                            "connections accepted.  This will not "
                            "work reliably on some Winsock "
                            "stacks!" << endl;
                }

致OP:

你為什么不想使用winsock2? 您可以嘗試使用IOCP來構建自己的服務器,盡管使這個跨平台變得有點棘手。 你可以像Brian建議的那樣看看Boost :: asio。

在您決定需要'winsock2的替代品'之前,請閱讀: Microsoft Windows網絡編程

總之,您不需要“替代Winsock2”,您需要了解如何使用提供的編程模型在您所定位的平台上完全生效。 然后,如果你真的需要使用異步I / O的跨平台套接字代碼,那么看看ASIO,但是,如果你真的不需要跨平台代碼,那么考慮一些實際上關注你可能在平台上遇到的問題的東西。你需要專注於 - 特別是某些特定於Windows的東西。 回到上面提到的那本書,看看你有各種選擇。

最高性能和可擴展的選項是使用IO完成端口。 我已經可以通過一些免費的代碼在這里 ,使得它很容易編寫擴展和在Windows(NT)基於平台運行良好的服務器; 鏈接頁面還鏈接到我寫過的關於此的一些文章。 我的框架與ASIO的比較可以在這里找到: http//www.lenholgate.com/blog/2008/09/how-does-the-socket-server-framework-compare-to-boostasio.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM