繁体   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