如何iocp同时发送上千条tcp
想用iocp实现同时发送上千个tcp包(不同ip)的功能,看了一些例子都没有说到主动发送tcp包,都是建立一个socket监听某个端口,接收clients发来的包。
如果想要实现同时主动发送上千个tcp包(向不同的ip),是不是要加一个线程专门调用wsasend来发送?怎么写才能实现同时主动大量发?
[解决办法]
启动1000个子线程,占用1000个socket资源,连接1000个目标地址,做1000个线程的管理及同步。。。
这个需求有点不切实际哦
[解决办法]
用iocp来实现的话,还需要启动1000个子线程??这是不是不符合iocp的思路呐?
[解决办法]
IOCP是一种基于服务器的设计解决方案,而不是基于客户端的,按楼主的要求看,应该说采用队列加线程池还是可行的。
[解决办法]
接收只是个例子啊,你可以在accept客户端后,不用wsarecv,而是用wsasend了。而且,你完全可以在想要的地方调用wsasend的。
[解决办法]
IOCP只是用来进行异步处理的,至于你想发送异步还是接收异步没有什么限制.
检测到客户连接后直接发送查询信息就行了.
[解决办法]
用完成端口吧,可以开上千个线程,调度线程即可
[解决办法]
用完成端口吧,可以开上千个线程,调度线程即可
---------------
哈哈,完成端口可没有叫你开上千个线程
[解决办法]
完成端口你可以查询读完成,也可以查询写完成状态的。
用了 WSASend 后,发送完它会通知你的
不过楼主的问题好象不是问这个。
你是说主动发送数据包,你把你的客户端连接用个
for(i=0;i <client_count; i++) {
send(); //WSASend
}
这样不就可以了?
难道你的服务器不保存客户端连接句柄的呀
[解决办法]
当然需要Client连你了。 它不连,你根本无法发 。
发送同一个内容时候, 上千个socket也要用同一个内存,这样就不会内存复制了。 控制好释放。
其它的,好象不存在什么问题吧 。。
通信 和 work thread 不需要那么多线程, 5,6个就差不多了,
开上千个线程序, 有点扯