如何向FTP服务器发送NOOP,保持长连接!

hehe264 2007-06-07 01:50:13
我用<afxinet.h>开发了1一个访问FTP服务器的程序。
现在的情况是,我觉得每对ftp操作一次就登陆一次显然是不好的,所以我希望能保持连接。但是如果客户端长时间没有反应,服务器端会自动断开,如何定时发送NOOP来保持当前的连接不被服务器段开!
高手请给出正解,在线等答案!
...全文
2298 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
soliddream66 2008-07-24
  • 打赏
  • 举报
回复
像cuteFtp和LeapFTP之类的客户端服务器如何保持连接的呢?很想借鉴一下思想。

目前我是隔段时间发送noop保持一个21端口的连接,不过ftp服务器是架设在自己电脑上的。

另外我发现尽管用socket编ftp客户端,在上传完文件,后close掉,还是有很多20端口处于CLOSE_WAIT状态。
hwman 2008-07-18
  • 打赏
  • 举报
回复
那就定期list如何?
WinEggDrop 2008-07-18
  • 打赏
  • 举报
回复
发送noop不能保持的.很多FTP是如果在10分钟内没有数据连接打开或数据连接有数据通讯,都会断开的.

soliddream66 2008-07-18
  • 打赏
  • 举报
回复
顶起来,我也想知道如何保持ftp连接
最简单的FTP服务器,供大家参考.版本 2 命令文本 = 到大写 (到文本 (服务器1.取回数据 ())) 命令文本 = 子文本替换 (命令文本, #换行符, , , , 真) .判断开始 (取文本左边 (命令文本, 4) = “USER”) ' 用户名 .如果真 (PASS (命令文本)) 服务器1.发送数据 (客户信息, “331 ” + #换行符, ) 返回 () .如果真结束 服务器1.发送数据 (客户信息, “530 ” + #换行符, ) .判断 (取文本左边 (命令文本, 4) = “PASS”) ' 密码,这里采用匿名的方式登陆 .如果真 (匿名) 服务器1.发送数据 (客户信息, “230 ” + #换行符, ) 返回 () .如果真结束 服务器1.发送数据 (客户信息, “530 ” + #换行符, ) .判断 (命令文本 = “OPTS UTF8 ON”) ' 路径采用UTF8编码 ' UTF8编码 = 真 服务器1.发送数据 (客户信息, “503 ” + #换行符, ) ' 暂时不支持utf8编码 .判断 (命令文本 = “SYST” 或 命令文本 = “SITE HELP”) 服务器1.发送数据 (客户信息, “215 近在眼前 FTP Server” + #换行符, ) .判断 (命令文本 = “PWD”) 服务器1.发送数据 (客户信息, “257 ” + #引号 + 目录 + #引号 + #换行符, ) .判断 (命令文本 = “TYPE A”) .如果真 (文件号 ≠ 0) 关闭文件 (文件号) 文件号 = 0 .如果真结束 服务器1.发送数据 (客户信息, “200 ” + #换行符, ) .判断 (取文本左边 (命令文本, 3) = “CWD”) ' 改变工作目录 .如果 (取文本长度 (命令文本) > 5) 服务器1.发送数据 (客户信息, “550 近在眼前友情提示:目前还不支持改变目录!” + #换行符, ) .否则 服务器1.发送数据 (客户信息, “250 ” + #引号 + 目录 + #引号 + #换行符, ) .如果结束 .判断 (命令文本 = “PASV”) ' 采用被动方式连接 IP = PASV (端口) 服务器2.端口 = 端口 服务器1.发送数据 (客户信息, “227 Entering Passive Mode (” + IP + “)” + #换行符, ) .判断 (命令文本 = “LIST”) ' 列表 服务器1.发送数据 (客户信息, “150 ” + #换行符, ) 发送数据 = 发送列表 (根目录 + 目录) 服务器2.发送数据 (数据客户, 发送数据, ) 服务器2.断开客户 (数据客户) 服务器1.发送数据 (客户信息, “226 Transfer complete” + #换行符, ) .判断 (命令文本 = “NOOP”) 服务器1.发送数据 (客户信息, “200 ” + #换行符, ) .判断 (命令文本 = “TYPE I”) 服务器1.发送数据 (客户信息, “200 ” + #换行符, ) .判断 (命令文本 = “SIZE”) 服务器1.发送数据 (客户信息, “421 ” + #换行符, ) .判断 (取文本左边 (命令文本, 4) = “QUIT”) 服务器1.发送数据 (客户信息, “220 再来我揍你!” + #换行符, ) 服务器1.断开客户 (客户信息) .默认 服务器1.发送数据 (客户信息, “550 近在眼前友情提示:暂时不支持该功能!” + #换行符, ) ' 其它命令你们自行扩展,这里暂时屏蔽
自己写的ftp服务端程序代码,支持{"USER", do_user }, {"PASS", do_pass }, {"CWD", do_cwd }, {"XCWD", do_cwd }, {"CDUP", do_cdup }, {"REIN", do_rein },//重新初始化,此命令终止USER,重置所有参数,控制连接仍然打开,用户可以再次使用USER命令 {"QUIT", do_quit }, /*------------传输参数命令------------*/ {"PORT", do_port },//数据端口,主要向服务器发送客户数据连接的端口 //格式为PORT h1,h2,h3,h4,p1,p2,其中32位的IP地址用h1,h2,h3,h4表示,16位的TCP端口号用p1,p2表示 {"PASV", do_pasv },//此命令要求服务器数据传输进程在指定的数据端口侦听,进入被动接收请求的状态 {"TYPE", do_type },//文件类型,可指定ASCII码、EBCDIC码、Image、本地类型文件等参数 /*------------服务命令----------------*/ {"RETR", do_retr },//下载文件 {"STOR", do_stor },//上传 {"APPE", do_appe },//上传,如文件已存在,数据附加到尾部 {"REST", do_rest },//重新开始 {"RNFR", do_rnfr }, {"RNTO", do_rnto },//重命名文件或目录 {"ABOR", do_abor },//异常终止 {"DELE", do_dele },//删除文件 {"RMD", do_rmd },//删除目录 {"XRMD", do_rmd }, {"MKD", do_mkd },//新建目录 {"XMKD", do_mkd }, {"PWD", do_pwd },//打印当前目录 {"XPWD", do_pwd }, {"LIST", do_list },//列目录详细清单 {"NLST", do_nlst },//列目录短清单 {"SYST", do_syst },//获取系统信息 {"STAT", do_stat },//返回服务器状态 {"SIZE", do_size },//获得文件大小 {"HELP", do_help }, {"NOOP", do_noop }, {"SITE", do_site }, }等命令

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧