FTP服务端主进程的基本工作步骤:
- 打开通信端口,端口号通常是21,使客户进程能够连接上;
- 等待客户进程发出连接请求,处于"监听"状态;
- 启动从属进程来处理客户进程发来的请求.从属进程处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他子进程;
- 回到等待状态,继续接受其他客户进程发来的请求.
FTP连接步骤:
FTP使用两条TCP连接来完成文件传输:控制连接与数据连接.控制连接用于传输控制,数据连接用于数据输送.在服务器启动后,服务器就会在端口21等待客户的连接请求,有用户需要传输文件时,客户与服务器的端口21建立一个控制连接,用来传送客户的命令和服务器的应答,该连接一直保持到客户与服务器通信结束为止.当客户发出数据传输命令时,服务器会主动与客户建立数据连接,并与其进行数据交换.
数据连接的基本流程:
- 客户进程为数据连接选择一个本地的临时端口号,并在该临时端口上等待服务器的连接请求;
- 客户进程在控制连接上用PORT命令将临时端口号发送给服务器;
- 服务器受到端口号后,发送一个连接请求,同客户端的该端口建立一个数据连接,服务器端用于数据连接的端口号总是21(默认?);
- 数据连接总是由发送文件的一方主动关闭,因为发送方总是用关闭连接来表示一个文件传输结束的.
使用的开发包:sun.net.ftp.*;
今天实现了登录的功能,在测试过程中,发现只能连接部分ftp服务器,对于这部分服务器,如果使用专用的ftp连接软件则能正常连接,百思不得其解.调试了很久都没有找到原因,上网找sun的ftp API文档,然而sun没有发布其API文档,郁闷.然后查看其他人的代码,看到了一个单词port, oh, my god!忘记了还有port要设置.总结登录的代码:
ftp = new FtpClient();
ftp.openServer(hostname, port); //打开控制连接
ftp. login(userField.getText(), passwdField.getText()); //登录
阅读(1754) | 评论(0) | 转发(0) |