当前位置:  开发笔记 > 编程语言 > 正文

winsock2的替代品,c ++中的示例服务器源代码

如何解决《winsock2的替代品,c++中的示例服务器源代码》经验,为你挑选了1个好方法。

我正在使用http://tangentsoft.net/wskfaq/examples/basics/select-server.html上的这个示例实现

这正在做我需要的大部分工作,处理连接而不会阻塞,并且所有工作都在其线程中(不像某些示例那样为每个连接创建新线程),但我担心因为我被告知winsock只会支持最多64个客户端连接:S

这64个连接是真的吗?

我还有其他选择吗?为类似的实现提供一个c ++示例会很酷.

谢谢



1> Brian R. Bon..:

替代图书馆:

你应该考虑使用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位的套接字.

您可以编写一个测试程序,在您计划支持的系统上尝试此操作,以查看它们是否不受限制.如果是,您可以使用线程来解决这个问题,就像使用事件对象一样.

资源

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有