java中怎么实现ftp服务器

java中怎么实现ftp服务器,第1张

学习了计算机网络之后,利用java写了一个ftp服务器

一、实现的ftp命令

实现了基本的user,pass,list,port,quit,retr,cwd,stor等命令

二、以上命令所对应的功能

对应的功能是:下载,上传,获取服务器目录,切换目录等

三、用于测试的ftp客户端:windows自带的ftp客户端

四、实现的思想

1、使用ServerSocket进行监听,每个控制连接的请求到来之后,开启一个线程进行处理(这里使用的java bio,效率较差,对于控制连接最好使用NIO处理,之后会再写个

nio的实现)

2、 对于命令使用工厂方法模式进行设计,当需要添加新的命令的时候,只需要添加一个新的命令类,实现相应接口,修改工厂产生逻辑,而不用修改其他的程序代码。可

扩展性较好,同时符合开闭原则。

五、实现过程中碰到的问题

1、对于tcp与socket的关系理解错误,以为所有的数据的输入都是要经过serverSocket().accept()方法。其实,ServerSocket.accept()所对应的是tcp里面的三次握手建

立连接的阶段,之后的tcp的连接由客户端和服务器端的一对socket来维护,是属于establish阶段,在这个阶段,通信是全双工的,任何一方都能够发送数据。

socket.close()对应的阶段是断开连接(四次挥手)的阶段。

2、刚开始对于ftp协议不是很理解,不知道他的工作方式是怎样的,后来在看了tcp协议卷里面的ftp的内容之后,才知道ftp命令和应答码是关键。eg:刚开始测试时,在

输入用户名之后,不会提示输入密码的。原因:没有返回对应的应答码:331. 另外要注意的是:返回的数据要以换行回车作为结束--\r\n.

六、代码列表

简单说明:

ftpServer:是服务器的主程序,入口,同时负责监听本地的21号端口。

ControllerThread.java:用于处理控制连接的线程(每一个控制连接请求对应一个线程)ps:实在很浪费(流量小,连接多)。

Share:一些全局性数据的维护。

Command:是命令接口,定义了一个所有命令都要实现的方法。

CommandFactory:命令工厂,通过传人的参数,决定生成的命令对象。

UserCommand,PortCommand等:是具体ftp命令的实现

ftp server ? 可以到sourceforge或者github开源软件仓库上去查找下载。流行的开源软件也可以,比如ftp filezilla server就是比较流行的。不过不一定是c代码了,也许是c++的。

快速入门指南

Serv-U 设计的配置简单,其灵活性和控制功能使您得以在可能的最佳安全保护下与其他人方便地共享文件。快速入门指南将帮助您安装服务器,创建首个域,并向新域中添加用户帐户。一旦完成这些简单步骤,您就能连接到新的文件服务器并开始传输文件!

安装

如果您是首次安装 Serv-U,只需遵照安装屏上的指令选择安装目录并配置桌面快捷方式,以便快速访问服务器。您也可选择将 Serv-U 作为系统服务安装,这意味着当 Windows 启动时自动启动 Serv-U——在任何用户登录服务器前。如果 Serv-U 运行于专用的服务器机器,且没有交互式用户会话定期登录该服务器时,该选项很有用。如果 Serv-U 未作为系统服务安装,则登录 Windows 后需要手动启动该软件。

如果覆盖安装现有 Serv-U,我们推荐首先备份原始安装文件夹。尽管可以安全地覆盖安装任何现有的 Serv-U 并对数据文件和二进制代码进行必要的升级,在升级前备份关键组件仍被视为良好的数据管理措施。如果进行升级的安装版本早于 7.0 版,将会出现提示对话窗,指出在版本 6 后作出的关键更改,以及这些更改会如何影响您对 Serv-U 文件服务器的管理。

一旦完成安装,将启动 Serv-U 管理控制台。如果选择安装后不启动 Serv-U 管理控制台,可以通过双击系统托盘内的 Serv-U 图标,或单击右键选择 "启动管理控制台" 选项,来随时启动控制台。

创建首个域

完成加载管理控制台后,如果当前没有现存域会提示您是否创建新域。单击是启动域创建向导。任何时候要运行该向导,可以单击管理控制台顶部或更改域对话框内的新建域按钮,从管理控制台内的任何页面都可打开更改域对话框。在 Serv-U 文件服务器上创建新域有 3 个简单步骤。

第一步是提供唯一的域名。域名对其用户是不可见的,并且不影响其他人访问域的方式。它只是域的标识符,使其管理员更方便的识别和管理域。同时域名必须是唯一的,从而使 Serv-U 可以将其与服务器上的其它域区分开。您也可在描述区提供域的任何其它描述说明。默认情况下,启用域并供用户访问。如果您希望在配置过程中暂时拒绝用户访问该域,取消选中启用域选择框。单击下一步继续创建域。

创建域的第二步是指定用户访问该域所用的协议。标准文件共享协议是 FTP(文件传输协议),它运行于默认端口 21。然而,任何这些端口号都可更改为您所选择的数值。如果在非默认端口上运行服务器,推荐使用 1024 以上的端口。关于每个 Serv-U 版本所支持协议的更多信息,请参考有关 Serv-U 版本的文档。选中您希望域支持的协议旁的选择框,然后单击下一步继续。

第三步即最后一步是指定用于连接该域的物理地址。通常,这是用户指定的 IP 地址,用于在 Internet 上查找您的服务器。大多数家庭用户可以保留该选项空白,以使 Serv-U 使用计算机上的任何可用 IP 地址。

第四步与最后一个步骤是决定在该域存储密码时将使用的加密模式。默认情况下,使用单向加密安全地存储所有密码,一旦保存密码就会将其锁定。不过,用户希望利用 Web 客户端上的“密码恢复”工具时,可以选择使用双向密码,这样在要求密码恢复时,Serv-U 就无需重置其密码。最后,若希望将密码存储为明文,Serv-U 也可以实现。不推荐这一方式,不过要与过去的系统集成(特别是在使用数据库支持时),这可能是必需的。

现在,点击完成以让 Serv-U 创建你的第一个域。祝贺您!现在您的第一个域上线了。下一次可以配置域的更多属性。有关这些选项的更多信息,请参见域设置文档。现在,您需要创建用户帐户以便通过该域开始共享文件。

创建首个用户帐户

创建首个域后,管理控制台将显示用户页面并询问您是否希望使用新建用户向导创建新用户帐户。单击是启动新建用户帐户向导。任何时候通过单击用户帐户页面上的 "向导" 按钮可以运行该向导。创建新用户帐户有 4 个简单步骤。

第一步是提供帐户的唯一的登录 ID。连接域时使用该登录 ID开始验证过程。登录 ID对于该域必须是唯一的,但服务器上其它域可能有帐户拥有同样的登录 ID。要创建匿名帐户,请指定登录 ID为 "anonymous" 或 "ftp"。

此时,还需为该用户账户指定全名与电子邮件地址。全名提供引用用户账户的规范名,电子邮件地址允许将 Serv-U 邮件通知与恢复的密码发送到用户账户。单击下一步继续创建用户帐户。

指定唯一登录 ID后,您还必须为帐户指定密码。当用户连接域时,密码是验证用户身份所需的第二条信息。如果有人要连接该域,他们必须知道第一步中指定的登录 ID,以及此密码。密码可以留空,但将导致知道登录 ID的任何人都能访问域。点击下一步继续。

第三步是指定帐户的根目录。根目录是登录成功时用户帐户在服务器硬盘(或可访问的网络资源)上所处的位置。实质上,它是用户帐户在服务器上收发文件时您希望它使用的位置。单击浏览按钮转到硬盘上的某个位置,或手动输入该位置。如果锁定用户至根目录,他们就不能访问其根目录结构之上的文件或文件夹。此外,根目录的真正位置将被屏蔽而显示为 "/"。单击下一步按钮继续最后一个步骤。

最后一步是授予用户帐户访问权。访问权是按目录授予的。然而,可访问目录中的所有子目录可以继承访问权。默认访问权是 "只读",这意味着用户可以列表显示其根目录中的文件和文件夹并进行下载。然而他们不能上传文件、创建新目录、删除文件/文件夹或重命名文件/文件夹。如果选择 "完全访问",用户就能执行所有上述操作。创建用户后,通过编辑用户并选择 "目录访问" 选项卡,可以更细致的配置这些访问权限。选择目录访问权限后,单击完成按钮创建用户帐户。

祝贺您!您的 Serv-U 文件服务器已准备就绪可供访问和共享。您可以像创建该帐户一样创建更多帐户以便与其他朋友、家人或同事共享。每个用户可有不同的根目录从而使您可与不同人共享不同文件。还有更多用户配置选项使您可以微调帐户访问服务器的权限。有关这些选项的更多信息,请参见用户帐户的文档。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/287472.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-23
下一篇2023-04-23

发表评论

登录后才能评论

评论列表(0条)

    保存