使用Java实现FTP服务器

使用Java实现FTP服务器,第1张

;   FTP是Internet 上用来传送文件的协议 在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download) FTP是实时联机服务 在使用它之前必须是具有该服务的一个用户(用户名和口令) 工作时客户端必须先登录到作为服务器一方的计算机上 用户登录后可以进行文件搜索和文件传送等有关 *** 作 如改变当前工作目录 列文件目录 设置传输参数及传送文件等 使用FTP可以传送所有类型的文件 如文本文件 二进制可执行文件 图象文件 声音文件和数据压缩文件等     FTP 命令    FTP 的主要 *** 作都是基于各种命令基础之上的 常用的命令有     ◆ 设置传输模式 它包括ASCⅡ(文本) 和BINARY 二进制模式     ◆ 目录 *** 作 改变或显示远程计算机的当前目录(cd dir/ls 命令)     ◆ 连接 *** 作 open命令用于建立同远程计算机的连接 close命令用于关闭连接     ◆ 发送 *** 作 put命令用于传送文件到远程计算机 mput 命令用于传送多个文件到远程计算机     ◆ 获取 *** 作 get命令用于接收一个文件 mget命令用于接收多个文件     编程思路    根据FTP的工作原理 在主函数中建立一个服务器套接字端口 等待客户端请求 一旦客户端请求被接受 服务器程序就建立一个服务器分线程 处理客户端的命令 如果客户端需要和服务器端进行文件的传输 则建立一个新的套接字连接来完成文件的 *** 作

    编程技巧说明    主函数设计    在主函数中 完成服务器端口的侦听和服务线程的创建 我们利用一个静态字符串变量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 != ) {    initDir = args[ ];    }else{ initDir = c: ;}    int i = ;    try{    System out println( ftp server started! )     //监听 号端口    ServerSocket s = new ServerSocket( )     for( ){    //接受客户端请求    Socket ining = s accept()     //创建服务线程    new ftpServer(ining i) start()     i++;    }    }catch(Exception e){}    }    线程类的设计    线程类的主要设计都是在run()方法中实现 用run()方法得到客户端的套接字信息 根据套接字得到输入流和输出流 向客户端发送欢迎信息     FTP命令的处理    ( ) 访问控制命令    ◆ user name(user) 和 password (pass) 命令处理代码如下     if(str startsWith( USER )){    user = str substring( )     user = user trim()     out println( Password ) }    if(str startsWith( PASS ))    out println( User +user+ logged in )     User 命令和 Password 命令分别用来提交客户端用户输入的用户名和口令     ◆ CWD (CHANGE WORKING DIRECTORY) 命令处理代码如下     if(str startsWith( CWD )){    String str = str substring( )     dir = dir+ / +str trim()     out println( CWD mand succesful ) }    该命令改变工作目录到用户指定的目录     ◆ CDUP (CHANGE TO PARENT DIRECTORY) 命令处理代码如下     if(str startsWith( CDUP )){    int n = dir lastIndexOf( / )     dir = dir substring( n)     out println( CWD mand succesful ) }    该命令改变当前目录为上一层目录     ◆ QUIT命令处理代码如下     if(str startsWith( QUIT )) {    out println( GOOD BYE )     done = true;}    该命令退出及关闭与服务器的连接 输出GOOD BYE

    ( ) 传输参数命令    ◆ Port命令处理代码如下     if(str startsWith( PORT )) {    out println( PORT mand successful )     int i = str length() ;    int j = str lastIndexOf( )     int k = str lastIndexOf( j )     String str str ;str = ;    str = ;for(int l=k+ ;    lstr = str + str charAt(l) }    for(int l=j+ ;l<=i;l++){    str = str + str charAt(l) }    tempPort = Integer parseInt(str ) +Integer parseInt(str )     }    使用该命令时 客户端必须发送客户端用于接收数据的 位IP 地址和 位 的TCP 端口号 这些信息以 位为一组 使用十进制传输 中间用逗号隔开     ◆ TYPE命令处理代码如下     if(str startsWith( TYPE )){    out println( type set )     }    TYPE 命令用来完成类型设置     ( ) FTP 服务命令    ◆ RETR (RETEIEVE) 和 STORE (STORE)命令处理的代码     if(str startsWith( RETR )){    out println( Binary data connection )     str = str substring( )     str = str trim()     RandomAccessFile outFile = newRandomAccessFile(dir+ / +str r )     Socket tempSocket = new Socket(host tempPort)     OutputStream outSocket= tempSocket getOutputStream()     byte byteBuffer[]= new byte[ ];    int amount;    try{    while((amount = outFile read(byteBuffer)) != ){

    outSocket write(byteBuffer amount)     }    outSocket close()     out println( transfer plete )     outFile close()     tempSocket close() }    catch(IOException e){}    }    if(str startsWith( STOR )){    out println( Binary data connection )     str = str substring( )     str = str trim()     RandomAccessFile inFile = newRandomAccessFile(dir+ / +str rw )     Socket tempSocket = new Socket(host tempPort)     InputStream inSocket= tempSocket getInputStream()     byte byteBuffer[] = new byte[ ];    int amount;    try{    while((amount =inSocket read(byteBuffer) )!= ){    inFile write(byteBuffer amount) }    inSocket close()     out println( transfer plete )     inFile close()     tempSocket close() }    catch(IOException e)    {}    }    文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR 这两个命令的处理非常类似 处理RETR命令时 首先得到用户要获得的文件的名称 根据名称创建一个文件输入流 然后和客户端建立临时套接字连接 并得到一个输出流 随后 将文件输入流中的数据读出并借助于套接字输出流发送到客户端 传输完毕以后 关闭流和临时套接字     STOR 命令的处理也是同样的过程 只是方向正好相反     ◆ DELE (DELETE)命令处理代码如下     if(str startsWith( DELE )){    str = str substring( )     str = str trim()     File file = new File(dir str)     boolean del = file delete()     out println( delete mand successful )     }    DELE 命令用于删除服务器上的指定文件     ◆ LIST命令处理代码如下     if(str startsWith( LIST )) {    try{    out println( ASCII data )     Socket tempSocket = new Socket(host tempPort)     PrintWriter out = new PrintWriter(tempSocket getOutputStream() true)     File file = new File(dir)     String[]    dirStructure = new String[ ];    dirStructure= file list()     String strType= ;    for(int i= ;iif( dirStructure[i] indexOf( ) == ) {    strType = d ;}    else{    strType = ;}    out println(strType+dirStructure[i]) }    tempSocket close()     out println( transfer plete ) }    catch(IOException e)    {}    LIST 命令用于向客户端返回服务器中工作目录下的目录结构 包括文件和目录的列表 处理这个命令时 先创建一个临时的套接字向客户端发送目录信息 这个套接字的目的端口号缺省为 然后为当前工作目录创建File 对象 利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组 然后根据名称中是否含有文件名中特有的 来区别目录和文件 最后 将得到的名称数组通过临时套接字发送到客户端 lishixinzhi/Article/program/Java/hx/201311/26847

1、JDK是java环境安装后的产物,可以对java程序进行编译,通过记事本等文本编辑器编写的java文件均可以进行编译;

2、IntellijIDEA是当前Java开发人员呼声很高的一款IDE,具有美观,高效等众多特点,小编还是非常喜欢的,所以以往我都是在自己电脑安装这款软件的;

3、Eclipse是免费的,这点很重要,所以大多公司里依然是使用eclipse这款IDE,而且它良好的性能,也在市场占着不小的比重;

4、MyEclipse是同eclipse一个公司的,在功能上增加了不少,相对于eclipse来说,myeclipse更像将eclipse中好多插件都集成起来了,当然,性能上面也有更好的考虑,不过这款IDE是收费的;

5、NetBeans是甲骨文公司生产的IDE,在其中也内置了许多功能,相对于idea和eclipse市场还是较少的;

6、EditPlus是一款文本编辑器,不过它也具有着编写java程序的能力,只不过面对庞大的项目时,很少使用这款IDE;

我的世界好玩的服务器有:usshotbownet美服、 eushotbownet欧服、>

现在Minecraft较为流行的四个版本是PC版,PC中国版PE版和PE中国版(iOS),中国版手游安卓版将于2017年10月12日开始。有的用Minecraft衍生出很多动画。

《我的世界》的技巧:

食物的来源的话其实很多。如果你出生点比较靠水的话建议你先割点草种小麦。同时也可以出钓竿钓鱼,不过蜘蛛最开始不是那么容易打就是了。运气好有村庄,找得到土豆的话就基本不需要担心食物的问题了。

我的世界PVP服务器IP大全:1、服务器名称:minecrat服务器端口/ip:IP::国际版花雨庭ip地址。游戏版本:纯服务器我的世界怎么查看ip地址。2、服务器名称:Tascity服务器IP:输入pe服务器端口名称必须为三个字符。3、服务器名称:“MAX”—幻想之城服务器的电信ip:端口服务器版本:Minecraft。游戏内容介绍玩家们可以自由选择游戏模式 [生存、创造、冒险、极限 (仅Java版) 和旁观模式(仅Java版) ]。在各种模式中体验不一样的有趣玩法,在生存模式中享受打怪、冒险等多种乐趣,在创造模式下享受当创世神的乐趣。该游戏以玩家在三维空间中自由地创造和破坏不同种类的方块为主题。玩家在游戏中可以在单人或多人模式中通过摧毁或创造精妙绝伦的建筑物和艺术,或者收集物品探索地图以完成游戏的成就(进度)。玩家也可以尝试红石电路和指令等玩法。

1由于服务器配置比较低综合考虑,选择ubuntu系统进行搭建

2 登陆阿里云服务器:

方法一:使用xshell软件登陆服务器

主机填写ip地址

端口号选择22

连接登陆服务器

方法二:使用阿里云管理终端

ssh root@服务器ip地址
password:输入密码

3如何上传文件

方法一:windows和linux上传或下载某个文件可以使用rz,sz

sudo apt-get install lrzsz

安装完成后进入准备存放改文件的文件夹输入rz,就会跳出文件选择框

例如:#cd apache-tomcat-7069/bin  rz

cd后有空格

cd ~:返回最上层

cd :返回上一层

cd -:返回最近 *** 作

方法二:使用xshell中的插件Xftp

4安装及配置环境

安装lsb指令

ubunu快捷安装需要的命令,更新一下:
自带源在大陆不好,更新即可解决
1sudo apt-get update  
2apt-get install yum  yum install -y redhat-lsb

输入lsb指令查看当前版本

查看版本号
lsb_release -a查看当前位数
getconf LONG_BIT

安装jdk:

方法一:ubuntu自动安装jdk

sudo apt-get install jdk

安装完成后配置环境:

使用vim指定编辑etc目录下profile文件,添加export
#vim /etc/profile
添加进profile文件
JAVA_HOME=/home/java/jdk160_12
export JRE_HOME=/home/liujicheng/java/jdk160_12/jre
export CLASSPATH=:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
//java存放位置请自行更改
//使用 which java 查看jdk所在文件夹

方法二:本地下载jdk上传

下载对应系统32位或64位的targz文件

建议:经过还几次对服务器进行环境搭建,已经有了一点小小的见解,建议不要使用过低版本的JDK,例如服务器JDK版本为15而项目JDK版本为18的情况,就会出现无法服务器无法运行war文件的情况,建议版本为17

上传targz文件有两种方法

11输入命令行 rz 选择安装包上传1使用rz时,注意安装 2通过xftp将上传

创建一个java文件夹
mkdir java

输入安装命令,将上传的targz文件解压到创建为java文件夹中
sudo tar -zxvf jdk-7u80-linux-x64targz -C /root/java

设置环境变量

使用vim指定编辑etc目录下profile文件,添加export
#vim /etc/profile添加进profile文件
JAVA_HOME=/root/java/jdk170_80
export JRE_HOME=/root/java/jdk170_80/jre
export CLASSPATH=:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

//java存放位置请自行更改//使用 which java 查看jdk所在文件夹

选择E,然后输入i 进行写 *** 作

最后 :x退出并保存

设置默认JDK

12345sudo update-alternatives --install /usr/bin/java java /root/java/jdk170_80/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /root/java/jdk170_80/bin/javac 300 sudo update-alternatives --install /usr/bin/jar jar /root/java/jdk170_80/bin/jar 300  sudo update-alternatives --install /usr/bin/javah javah /root/java/jdk170_80/bin/javah 300  sudo update-alternatives --install /usr/bin/javap javap /root/java/jdk170_80/bin/javap 300

如果之后一个版本显示: 

There is only one alternative in link group java (providing /usr/bin/java):
/usr/lib/jvm/jdk170_60/bin/java

否者,选择合适的jdk

检查jdk是否安装成功,输出版本号及对应信息即安装成功

#java
#javac
#java -version

安装tomcat

方法一:ubuntu自动安装tomcat

sudo apt-get install tomcat

添加jdk和jre环境变量

JAVA_HOME=/home/java/jdk160_12
JRE_HOME=/home/homer/eclipse/jdk160_12/jre  
PATH=$JAVA_HOME/bin:$JRE_HOME:$PATH  
CLASSPATH=:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar  
TOMCAT_HOME=/opt/apache-tomcat-7029  

启动tomcat

cd apache-tomcat-7069/bin /startupsh

出现提示说明配置成功

方法二:上传tomcat并解压

通过上述上传文件方法上传后

使用tar指令解压

tar -zxvf apache-tomcat-8024targz

然后进入apache-tomcat-7069文件夹

# cd apache-tomcat-8024 /bin/

启动tomcat

cd apache-tomcat-8024 /bin/ /startupsh

显示如下说明成功

最后输入:>

安装Mysql

ubuntu下自动安装

sudo apt-get install mysql-server

apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

设置数据库密码:

检查Mysql是否安装成功

sudo netstat -tap | grep mysql

登陆Mysql

mysql -uroot -p密码

成功:

查看数据库

show databases

将sql文件导入

//先选定数据库
use iswust        
source /root/testsql//source /文件夹/sql文件名

select from score

5java工程打包上传并运行

右键选中java项目,WAR Export 将文件以war格式导出

(注意:java工程的jdk一定要先降低到与服务器的jdk版本相同,例如java工程为18而服务器为16则会报错)

降低jdk方法:

并通过XFTP或上述的上传文件方法,上传至apache-tomcat-7069/webapps中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10667811.html

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

发表评论

登录后才能评论

评论列表(0条)