用vb的winsock使用http协议下载文件时,最后一个到来的数据包DataArrival产生事件会出现winsock的state是8,就是说最后一个dataarrival事件调用getData时,远端服务器已经关闭连接,出现错误,如何解决?不是每一次都这样,正常时可以接受到最后一个数据包。

解决方案 »

  1.   

    正常的,web服务器为了节省资源 会自动关闭你使用GetData 前 先判断一下 bytesTotal 是否等于 0 ,否则不调用GetData
      

  2.   

    问题就是它不是等于0,而是最后一个数据包,就是说dataarrival事件发生是bytesTotal不是
    0,而winsock已经关闭,然后程序出错。所以遇到这种情况我只能在重连再下载最后一个包。
      

  3.   

    一般 web服务器 发送完 数据 在最后 会发送几个 0 字节的数据包的 ,很少出现你的情况,你把DataArrival的代码贴出来看看
      

  4.   

    呵,又一个Winsock控件的牺牲品~~~~没有任何办法,因为Winsock在收到对方断开的消息时,立即断掉此连接,而此时积压的未来得及接收的数据因为GetData方法的先天不足无法取出,这是因为GetData方法检查了Sock状态,在断开模式下不管有没有除余数据都无法正常读出.要解决的话,你只能用SockAPI自已写.想当年我也是遇到这个问题不得不用SockAPI来写.