能不能发个我一个呢? 谢谢你了my mail: [email protected]

解决方案 »

  1.   

    不要随便用完成端口,这个模型不但难,而且它是用来管理在同一时间里有上千个套接字访问得这种情况,虽然它是效能最高得一种套接字模型,而且好象只有win2000才提供这个东西。
      

  2.   

    我现在利用CAsyncSocket来做,因为其是异步机制,可以引入一些超时的方法
    其具体实现是按照HTTP协议的要求,使用Send方法发出http的请求,再等待接收
    数据,即等待OnReceive事件到达目前存在一个问题:接收HTTP的头信息不会有什么问题,头信息是以一个空行结束的,可以判断出来。但是对于Http的Msg部分因为TCP的数据可能不是一次到达的,并且我通过实际的测试发现,根据信息反馈长短的不同有下面几种可能性:
    1.先收到HTTP头信息,第二次才收到后面的Msg
    2.先收到HTTP头信息和Msg的一部分,第二次才收到Msg的后一部分
    3.第一次就收到HTTP头信息和Msg全部这时我通过什么标志可以判断Msg信息全部结束呢?我看过有的socket处理http请求的方法,其接收信息时因为采取的是同步的方法所以没有什么借鉴意义
      

  3.   

    NT和2000都支持完成端口,不过使用起来有一定困难,我就用来写过一个服务器。
    如果不是做服务器的话,还是不要用Completion Port。
    我觉得WSAEventSelect,事件模式是比较容易用的。通过WSAEventSelect把一个Socket和一个通过WSACreateEvent()生成的对象句柄绑定起来,然后用WSAWaitForMultipleEvents来等待这个事件就可以了。
    可以设定等待的时间长度。