用Java实现FTP服务器-Java基础-Java-编程开发

Win10搭建FTP服务器+java代码实现文件上传至FTP服务器 Win10搭建ftp服务器 打开控制面板 -> 程序和功能,点击启用或关闭Windows功能,勾选红色方框内的选项 控制面板 -> 管理工具,如下打开IIS管理器 先在本地磁盘中创建一个目录用来存放FTP站点的内容,如 E:\FTP站点 添加FTP站点(右击网站),站点名称自拟,点击下一步 绑定和SSL设置:IP地址为本机ip地址(查看本地ip,在控制台输入命令ipconfig... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

FTP 命令

   FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:

   ◆ 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;


   ◆ 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);

   ◆ 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;

   ◆ 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;

   ◆ 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

   编程思路

   根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。

   编程技巧说明

   1.主函数设计

   在主函数中,完成服务器端口的侦听和服务线程的创建。我们利用一个静态字符串变量initDir 来保存服务器线程运行时所在的工作目录。服务器的初始工作目录是由程序运行时用户输入的,缺省为C盘的根目录。

   具体的代码如下:

public class ftpServer extends Thread{
private Socket socketClient;
private int counter;
private static String initDir;
public static void main(String[] args){
if(args.length != 0) {
initDir = args[0];
}else{ initDir = "c:";}
int i = 1;
try{
System.out.println("ftp server started!");
//监听21号端口
ServerSocket s = new ServerSocket(21);
for(;;){
//接受客户端请求
Socket incoming = s.accept();
//创建服务线程
new ftpServer(incoming,i).start();
i ;
}
}catch(Exception e){}
}
2. 线程类的设计

   线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息。

   3. FTP 命令的处理

   (1) 访问控制命令
   ◆ user name(user) 和 password (pass) 命令处理代码如下:

if(str.startsWith("USER")){
user = str.substring(4);
user = user.trim();
out.println("331 Password");}
if(str.startsWith("PASS"))
out.println("230 User " user " logged in.");
   User 命令和 Password 命令分别用来提交客户端用户输入的用户名和口令。

   ◆ CWD (CHANGE WORKING DIRECTORY) 命令处理代码如下:
if(str.startsWith("CWD")){
String str1 = str.substring(3);
dir = dir "/" str1.trim();
out.println("250 CWD command succesful");
}
   该命令改变工作目录到用户指定的目录。

   ◆ CDUP (CHANGE TO PARENT DIRECTORY) 命令处理代码如下:

if(str.startsWith("CDUP")){
int n = dir.lastIndexOf("/");
dir = dir.substring(0,n);
out.println("250 CWD command succesful");
}
   该命令改变当前目录为上一层目录。

   ◆ QUIT命令处理代码如下:
if(str.startsWith("QUIT")) {
out.println("GOOD BYE");
done = true;
}
   该命令退出及关闭与服务器的连接,输出GOOD BYE。

   (2) 传输参数命令

   ◆ Port命令处理代码如下:
if(str.startsWith("PORT")) {
out.println("200 PORT command successful");
int i = str.length() - 1;
int j = str.lastIndexOf(",");
int k = str.lastIndexOf(",",j-1);
String str1,str2;
str1="";
str2="";
for(int l=k 1;lstr1 = str2 str.charAt(l);
}
for(int l=j 1;l<=i;l ){
str2 = str2 str.charAt(l);
}
tempPort = Integer.parseInt(str1) * 16 *16 Integer.parseInt(str2);
}
   使用该命令时,客户端必须发送客户端用于接收数据的32位IP 地址和16位 的TCP 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。

   ◆ TYPE命令处理代码如下:
if(str.startsWith("TYPE")){
out.println("200 type set");
}
   TYPE 命令用来完成类型设置。

   (3) FTP 服务命令

   ◆ RETR (RETEIEVE) 和 STORE (STORE)命令处理的代码
if(str.startsWith("RETR")){
out.println("150 Binary data connection");
str = str.substring(4);
str = str.trim();
RandomAccessFile outFile = new
RandomAccessFile(dir "/" str,"r");
Socket tempSocket = new Socket(host,tempPort);
OutputStream outSocket
= tempSocket.getOutputStream();
byte byteBuffer[]= new byte[1024];
int amount;
try{
while((amount = outFile.read(byteBuffer)) != -1){
outSocket.write(byteBuffer, 0, amount);
}
outSocket.close();
out.println("226 transfer complete");
outFile.close();
tempSocket.close();
}
catch(IOException e){}
}
if(str.startsWith("STOR")){
out.println("150 Binary data connection");
str = str.substring(4);
str = str.trim();
RandomAccessFile inFile = new
RandomAccessFile(dir "/" str,"rw");
Socket tempSocket = new Socket(host,tempPort);
InputStream inSocket
= tempSocket.getInputStream();
byte byteBuffer[] = new byte[1024];
int amount;
try{
while((amount =inSocket.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);
}
inSocket.close();
out.println("226 transfer complete");
inFile.close();
tempSocket.close();
}
catch(IOException e){}
}
   文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。

   STOR 命令的处理也是同样的过程,只是方向正好相反。

   ◆ DELE (DELETE)命令处理代码如下:
if(str.startsWith("DELE")){
str = str.substring(4);
str = str.trim();
File file = new File(dir,str);
boolean del = file.delete();
out.println("250 delete command successful");
}
   DELE 命令用于删除服务器上的指定文件。

   ◆ LIST命令处理代码如下:
if(str.startsWith("LIST")) {
try{
out.println("150 ASCII data");
Socket tempSocket = new Socket(host,tempPort);
PrintWriter out2= new PrintWriter(tempSocket.getOutputStream(),true);
File file = new File(dir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String strType="";
for(int i=0;iif( dirStructure[i].indexOf(".") == -1) {
strType = "d ";}
else
{strType = "- ";}
out2.println(strType dirStructure[i]);
}
tempSocket.close();
out.println("226 transfer complete");
}
catch(IOException e){}
   LIST 命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建File 对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。

java搭建ftp服务器_java构建ftp服务器 [转:资源来自互联网,仅供分享]用Java构建稳定的Ftp服务器在www风行的今天,Ftp已经远不如以前使用得广泛,但是在许多大学等科研单位,Ftp仍然是最常用的文件交换方式。构建一个Ftp服务器要比构建一个Ftp客户端来得简单,因为服务器不需要复杂的图形界面。相比传统的C/C++,使用Java的多线程和网络编程能令我们更轻易地开发出稳定可靠的Ftp服务器。Ftp协议简介FileTransfer... 阅读详情

相关推荐

Java实现FTP服务器文件交互指南

本文还有配套的精品资源,点击获取 简介:Java访问FTPSever是开发文件交换应用程序的常见需求。本博客探讨如何利用Java标准库或第三方库实现该功能。文章重点介绍了两个关键依赖库: commons-net-1.4.1.jar 和 jakarta-oro-2.0.8.jar ,前者提供丰富的FTP客户端API,支持文件上传、下载等操作;后者提...

weixin_30700095的博客 1973

使用frp中的xtcp映射穿透指定服务实现不依赖公网ip网速的内网穿透p2p

frp使用xtcp映射穿透指定服务,实现访问内网服务器

flyinghu123的博客 6844

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3410

用Java实现FTP服务器解决方案-Java基础-Java-编程开发

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/javascript"

java专栏 388

深入解析Linux Suspend/Resume机制——从用户态到内核态的完整流程

本文深入解析Linux Suspend/Resume机制,从用户态触发到内核态执行的完整流程。详细介绍了三种挂起模式(Freeze、Standby、Suspend to RAM)的实现原理,包括系统调用入口、状态验证、设备挂起流程及平台相关操作。同时提供实战调试技巧,帮助开发者解决电源管理中的常见问题。

weixin_29313239的博客 444

Quartz定时任务调度框架中的Misfire策略实战解析

本文深入解析了Quartz定时任务调度框架中的Misfire(失火)处理策略。针对SimpleTrigger和CronTrigger两种常用触发器,详细对比了其各自的Misfire指令(如NowWithExistingCount、FireAndProceed等)的核心行为与适用场景,并提供了基于不同业务需求(如数据补跑、时间点敏感度)的实战选型指南,帮助开发者构建更健壮可靠的任务调度系统。

weixin_29250573的博客 77

Frp配置——stcp及p2p模式

我们在上一篇文章内网穿透神器frp——实现在家远程办公_mac,rdp,windows_黄腾霄的博客-优快云博客中介绍了如何使用frp的tcp模式,在公网暴露内网设备的tcp服务。还根据此技术实现了对内网设备的远程桌面服务访问。今天我们来分析下这种方式存在的问题,以及可以参考的解决方案。 Frp的TCP模式问题 这里主要存在2个问题。 第一个是安全问题: 试想一下,frp的tcp模式相当于...

Argon_Ghost的博客 8628

ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析

本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。

zeta9的博客 366

基于frp的内网穿透搭建指南

利用frp搭建内网穿透服务,使用VPS作为服务端,文中以配置远程桌面连接、远程SSH连接为例。文中frp版本支持加密tcp、p2p连接等。详细讨论p2p连接在不同nat类型下的成功概率和产生原因。

张火火的博客 5101

ZYNQ平台上基于SGMII接口的IEEE1588/PTP协议高效实现方案

本文深入探讨了在Xilinx ZYNQ平台上,利用SGMII接口实现高精度IEEE1588/PTP协议的方案。通过将硬件时间戳单元集成在PL端的AXI以太网子系统IP核中,该方案绕过了软件协议栈和外部PHY的延迟,实现了亚微秒级的时间同步精度。文章详细解析了硬件设计、Vivado IP配置、Linux驱动移植及PTP协议栈部署等关键步骤,为工业控制、通信等领域的高精度网络同步提供了高效、灵活的解决路径。

q5r6s7的博客 606

别只聊天了!手把手教你为Ollama+Open WebUI搭建本地知识库(基于BGE-M3和Qwen)

本文详细介绍了如何利用Ollama、Open WebUI和BGE-M3构建本地知识库,实现智能问答和文档检索。通过环境准备、文档处理、向量化实战和应用案例,帮助用户突破基础聊天场景,打造高效的个人知识管理体系。特别适合技术文档管理和学术研究场景。

weixin_42523720的博客 479

用Java实现FTP

然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。案例一:查看指定目录的文件信息。

qq_51593012的博客 5612

保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙

本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。

weixin_34098209的博客 356

JAVA文件传输

1.1 Java语言Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

m0_56073435的博客 2717

2026年OPPO嵌入式岗位面试题带详细答案

本文总结了OPPO嵌入式岗位面试的核心考点,涵盖硬件驱动、系统启动、Linux内核开发等7大模块共34道典型题目。重点解析了SPI通信协议、中断处理、U-Boot启动流程、Linux驱动开发等关键技术,突出硬件调试与工程实践能力考核。题目设置贴合实际岗位需求,适合校招与社招驱动开发岗位应聘者系统复习,帮助掌握嵌入式开发的核心知识与面试要点。

Open 491

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Windows搭建FTP服务器,JAVA实现读写功能

Windows搭建FTP服务器目录博主介绍开启FTP功能放行端口重启计算机添加FTP访问用户添加FTP站点本地访问测试修改FTP设置Java整合FTP代码实现????作者相关的文章、资源分享????????点击直接资料领取???? 目录 博主介绍 ???? 个人主页:苏州程序大白 ???? 个人社区:优快云全国各地程序猿 ????作者介绍:中国DBA联盟(ACDU)成员,优快云全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年

苏州程序大白的博客 9456

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【实战-干货】手把手带你搭建自己的FTP服务器,实现文件上传、下载

手把手带你实现Ftp服务器搭建,JAVA程序实现Ftp文件上传和下载。

2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java实现文件上传到ftp服务器

使用java来实现将文件上传到ftp服务器中

weixin_44486583的博客 1万+

Java 实现 FTP 服务

1、FTP简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Uploa...

zhaohong_bo的专栏 3万+

Java实现简单的FTP服务器

前言 FTP协议 工作机制概要 FTP主要命令 响应信息 实践过程 实现的FTP命令 实现思想 遇到的问题前言学习了Java网络编程了,为了检验自己的学习程序和熟悉相关的知识点,为此,使用Java Socket编程实现了一个简单的FTP服务器。以下记录了自己整个开发的流程。FTP协议自己平时也有用过ftp协议进行文件的传输,知道FTP协议的默认端口是21,可对于底层是如何实现,客户端与服务端之间的通

WoodyOilove 7063

java上传文件到FTP服务器

前段时间,项目中使用到了上传文件到FTP服务器,再此略作整理,形成一个util工具,方便日后使用。 项目代码已上传至github:https://github.com/hack-feng/ftpdemo.git 点击直接前往 首先定义一个FTP服务器和上传文件的基础信息 封装一个FtpBean.java实体类 public class FtpBean { /** * 部分信息如果传空的话,默...

笑小枫 1万+

Java将文件上传到ftp服务器

Java将文件上传到ftp服务器 首先简单介绍一下什么是FTP,以及如何在自己的电脑上搭建一个ftp服务器; —— FTP是文件传输协议(FTP)是一种客户端/服务器协议,用于将文件传输到主机或与主机交换文件。它可以使用用户名和密码进行身份验证。匿名 FTP 允许用户从 Internet 访问文件,程序和其他数据,而无需用户 ID 或密码。总之就是方便一个可以上传下载文件的地方。 要实现上传文件,首先要在本地创建一个ftp服务器(win10系统); 一、本地创建一个其他用户 二、创建FTP目录 三、账户绑

焦糖橙子 4969

JAVA实现FTP文件上传下载及FTP服务器搭建

最近项目中需要到FTP服务器中下载文件,于是花了点时间研究了一下,网上查了很多资料,都没有很详细的FTP服务器的搭建教程,踩了很多坑,终于搞定了,因此在此记录分享,如有错误,欢迎大家指正,谢谢!FTP是一个专门进行文件管理的操作服务,一般来讲可以在任意的操作系统之中进行配置,但是如果考虑到简便性,一般来讲可以直接在Linux系统下进行安装。 FTP (File Transfer Protocol、文件传输协议)是TCP/IP协议中的一部分,属于应用层协议。

Xunyinyiran的博客 4546

Java ftp服务器

FTP响应由三个数字构成,后面是一些文本。File Transfer Protocol,文件传输协议,顾名思义,Ftp就是用于文件的传输,Ftp协议是基于TCP协议的,因此,在一个Ftp会话开始前,客户端和服务器必须首先建立一个TCP连接,这个TCP连接通常被称作控制连接,客户端通过此连接向服务器发送FTP命令,服务器处理命令后,将返回一个响应码。有个最简单的方法,便是使用现成的Ftp客户端,推荐CuteFtp,因为它总是把客户端发送的命令和服务器响应打印出来,我们可以非常方便的看到服务器的输出结果。

www_oracle_com的博客 1582

简单的ftp服务器实现 (java)

学习了计算机网络之后,利用java写了一个ftp服务器。 一、实现的ftp命令        实现了基本的user,pass,list,port,quit,retr,cwd,stor等命令 二、以上命令所对应的功能         对应的功能是:下载,上传,获取服务器目录,切换目录等 三、用于测试的ftp客户端:windows自带的ftp客户端 四、实现的思想

rui1187349730的专栏 1万+
上一篇: 操纵java数组-Java基础-Java-编程开发
下一篇: 企业级应用中的Applet和Servlet的通信-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值