完成端口 的主线程,是不停的查询io,没数据过来,就一直挂起,,当有个连接过来,或者发送数据过来,就往下执行,当来了一个新连接的时候,一般看人家都是把这个新连接的socket,和完成端口关联,这个,收发,都会去查一次,,不知道是不是??
还有,如果我不关联的话,他就只在第一次,给他发数据的时候查询io,以后就不查,一直挂起,,不知道为什么?
大家给指点下。

解决方案 »

  1.   

    如果不关联,你查完成端口也查不到有没有数据,所以只能靠阻塞式socket
    建议lz好好看看socket编程非阻塞模式,《windows网络程序设计》就可以
      

  2.   

    有兴趣想把问题弄明白建议看ASIO的源代码,没兴趣就直接用ASIO
      

  3.   

    注意Overlapped这个参数,你可以在其中指示出本次提交的动作是接收还是发送。这样在你检测到完成/失败信号时,就可以区分出来。
      

  4.   

    楼主看看王艳平的windows网络与通信程序设计吧
      

  5.   

    Overlapped 这个接收后,就转换成自己定义的一个结构体,一般情况是,发送,或者接收以前,给他定义一个标致,比如IOCP_SEND 然后获得这个标志进行判断
    我想问下,是不是除了这个,在没其他方式可以判断是不是,发送或者接受??
    换想问下,是不是必须关联,是不是不关联,就查不到端口???
      

  6.   

    你可以使用的就只有两个参数,而Key是与Socket的永久关联并不能描述当前的请求,只有Overlapped是每请求关联,能够对请求做出描述。你接收,就好比你拿个桶子去装水,但是这个时候并不一定就有水,只有对方送过来才有,你说你的桶子接的水,难道你还会不知道?
      

  7.   

    这个我知道,,我发送完后把buf,清空,查询到看buf,就可以知道,,我想问下有没有明显的标志,,或者,你们一般用什么方法,
      

  8.   

    当然是扩展Overlapped结构来添加显式标志。BUF清空,就算是全'\0'也并不代表就没有数据,也许发过来的数据就是全"零".
      

  9.   

    我在接水,但是有可能是我发送 或者是我接受,产生的,,不一定是别人发送过来的,,我问的是,我怎么区分,是我发送或者接受,还是别人发送过来,我可以设置标志,在accept时设置,接收过来可以知道,,但是我在发送过去的时候,他也查io出来,我怎么判断他查的是什么,
      

  10.   

    发送和和接受动作,,都会查询io啊,,接收别人的也会查询io啊,,