想用iocp实现同时发送上千个tcp包(不同ip)的功能,看了一些例子都没有说到主动发送tcp包,都是建立一个socket监听某个端口,接收clients发来的包。
如果想要实现同时主动发送上千个tcp包(向不同的ip),是不是要加一个线程专门调用wsasend来发送?怎么写才能实现同时主动大量发?

解决方案 »

  1.   

    启动1000个子线程,占用1000个socket资源,连接1000个目标地址,做1000个线程的管理及同步这个需求有点不切实际哦
      

  2.   

    用iocp来实现的话,还需要启动1000个子线程??这是不是不符合iocp的思路呐?
      

  3.   

    IOCP是一种基于服务器的设计解决方案,而不是基于客户端的,按楼主的要求看,应该说采用队列加线程池还是可行的。
      

  4.   

    接收只是个例子啊,你可以在accept客户端后,不用wsarecv,而是用wsasend了。而且,你完全可以在想要的地方调用wsasend的。
      

  5.   

    to unsigned:
       你所说的队列加线程池的方案能简单介绍下,或提供一些参考资料或网页。to mimong_lin:
       我要实现的是先发查询,才接收client的回复。
      

  6.   

    IOCP只是用来进行异步处理的,至于你想发送异步还是接收异步没有什么限制.
    检测到客户连接后直接发送查询信息就行了.
      

  7.   

    那检测客户连接(connect)是不是也不需要加一个类似listen的线程呐?
    如果我想要实现同时主动发送上千个tcp包(向不同的ip),并监听返回的包。具体的思路应该是怎么样的,能具体说说不?
    呵呵
      

  8.   

    就是打算用完成端口呐,呵呵,有没有高人详细来说说怎么实现?
    如果开一个线程来主动发tcp包的话,连接是不是不能用wsaconnect(iocp不支持吧?)
    呐应该怎么实现呢?恳请高人指点
      

  9.   

    完成端口你可以查询读完成,也可以查询写完成状态的。用了 WSASend 后,发送完它会通知你的不过楼主的问题好象不是问这个。你是说主动发送数据包,你把你的客户端连接用个for(i=0;i<client_count; i++) {
       send();  //WSASend 
      
    }这样不就可以了?
    难道你的服务器不保存客户端连接句柄的呀
      

  10.   

    当然需要Client连你了。 它不连,你根本无法发 。发送同一个内容时候, 上千个socket也要用同一个内存,这样就不会内存复制了。 控制好释放。其它的,好象不存在什么问题吧 。。通信 和 work thread  不需要那么多线程, 5,6个就差不多了,
    开上千个线程序, 有点扯