利用wininet.dll实现FTP客户端,与FTP服务器建立连接会话后进行文件传送,在文件传送过程中出现网络异常中断(重启客户端或断开网线),恢复连接后如何在客户端关闭之前由于网络异常中断而残留在服务器端的连接会话?说明:
客户端进行FTP连接到服务器进行文件传送,在传送过程中网络异常中断后(拔掉网线),而后又恢复正常连接,那么客户端能够在重新连接后关闭掉之前与服务器建立的连接会话吗? (服务器总保持着这个连接会话进程,除非连接不活动超时才会被服务器自动干掉,但我现在想通过客户端进行该关闭操作,如何实现呢?)。

解决方案 »

  1.   

    多谢大家的支持,我已经找到间接实现的办法:
    1、对于网络环境不稳定的情况,可以将本地文件分块上传,对远程FTP文件写入一个缓冲区大小后自动关闭连接句柄(此时服务器端生成了一个分卷文件1),然后再重新连接后又写入一个缓冲区大小数据流后,再次自动关闭网络连接句柄(此时服务器端生成了另外一个分卷文件2)... 直到文件上传完毕为止,那么服务器端可能产生了目标文件的若干个分卷文件(虽然有些笨,但文件总归是完整的传上来了),剩下的工作当然就是下载方需要顺序循环读取服务器上的所有分卷文件合并写入到本地的下载文件中(保证下载下来的文件是一个完整的文件);说明:
    这个方法里面小弟感到比较奇怪的是使用wininet中的API:FtpOpenFile后服务器端的目标文件总会变成一个0字节的空文件(无论目标文件是否存在,是否有数据)。在这个事实下,小弟不得以采用分块上传生成若干分卷文件的办法间接实现了文件的断点续传,当然配套的要求组件的下载方法里面能够自动搜索其分卷文件进行合并下载。(忘了说小弟正在使用Wininet中的API写一个FTP客户端的组件)2、另外一个办法就是可以设置服务器端连接超时的时间尽量短些,Windows和Linux的FTP服务连接超时好像缺省都是900秒。也就是说服务器端建立的连接通道如果900秒内没有数据传输或活动情况那么服务器端会自动断开那个死了的连接通道,释放资源。(别扭,不稳定也不爽!)