用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

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 280

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

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

张火火的博客 5101

别再死磕V1了!手把手教你用WPS Web Office V3 SDK快速集成(附Java Demo避坑指南)

本文详细介绍了如何从WPS Web Office V1迁移到V3版本,重点讲解了V3在性能、安全性和扩展性上的优势,以及Java开发者如何快速集成V3 SDK。文章包含核心功能实现、高级功能适配(如Solon框架)和常见问题排查指南,帮助开发者高效完成迁移并避免常见陷阱。

weixin_27215337的博客 336

解忧杂货铺(四):Hightec生成HEX方法+小功能开启

Hightec使用的一些常用技能

梦想技术家 2162

Frp配置——stcp及p2p模式

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

Argon_Ghost的博客 8628

快速卷积结构FIR数字滤波器的设计与ARM平台实现

本文提出了一种基于快速卷积结构的FIR数字滤波器设计与实现方案。通过Matlab设计了满足特定指标的低通FIR滤波器,采用重叠-保存法和重叠-相加法两种快速卷积算法,将计算复杂度从O(N·M)降低到O(NlogN)。详细介绍了滤波器系数生成、性能验证流程,并提供了ARM平台C语言实现的关键技术,包括定点量化处理。实验结果表明,该方法能有效滤除混合信号中的高频干扰,保留目标1kHz正弦信号,验证了设计方案的有效性。

huanghm88的专栏 125

用Java实现FTP

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

qq_51593012的博客 5612

matlab数学建模练习(2)练习电子科技大学数学实验

【代码】matlab数学建模练习(2)练习电子科技大学数学实验。

c_wrj_的博客 1435

RK3568适配MIPI屏幕触摸,触摸延时很大

我用的是系统,接了一个,设备树已经正确配置,evtest测试坐标值和触摸位置都是准确的。但是出现了一个:我在屏幕上点一下,要等大约 2 秒才能在evtest里看到坐标事件打印。这种现象在 Goodix 系列触摸驱动里比较少见,一般意味着。

小灰灰的博客 1363

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

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

Xunyinyiran的博客 4546

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 338

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

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

2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

苏州程序大白的博客 9456

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

weixin_44486583的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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服务器

JAVA实现简单的ftp服务器实现 通过界面可启动FTP服务,先看看看效果,然后具体代码附后。 点击启动FTP服务后,可以看到控制台: 可以通过get和send以及dir执行相对应的操作。 点击退出按钮,关闭服务。 具体代码 JAVA版本如下: 整个项目如下: 需要用到的jar包下载 下载链接:https://dom4j.github.io/ 下载链接:https://blog.csdn.net/a520songhai/article/details/8...

简简单单 1771

Java ftp服务器

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

www_oracle_com的博客 1582

java实现把文件上传至ftp服务器

用java实现ftp文件上传。我使用的是commons-net-1.4.1.zip。其中包含了众多的java网络编程的工具包。 1 把commons-net-1.4.1.jar包加载到项目工程中去。 2 看如下代码: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import

海阔天空 1万+

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

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

rui1187349730的专栏 1万+
上一篇: 制作Windows mobile下软件安装包-Java基础-Java-编程开发
下一篇: Java源码分析:深入探讨Iterator模式-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值