如何用java实现ftp客户端程序

Python015

如何用java实现ftp客户端程序,第1张

FTP 的主要操作都是基于各种命令基础之上的。常用的命令有: · 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式· 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令)· 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接· 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机· 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。 编程思路 根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。 编程技巧说明 http://www.jacken.com.cn/Programming/Java/2008-10-24/Java-Articlea7b870512fe2bce0ffefc95c6800ca5d.html

InetAddress ip=InetAddress.getByName(args[0])//第一个输进来的是ip

int port = Integer.parseInt(args[1])//e\第二个输进来的是端口号

这两个就是接收参数

import java.io.*

import java.net.*public class ftpServer extends Thread{ public static void main(String args[]){

String initDir

initDir = "D:/Ftp"

ServerSocket server

Socket socket

String s

String user

String password

user = "root"

password = "123456"

try{

System.out.println("MYFTP服务器启动....")

System.out.println("正在等待连接....")

//监听21号端口

server = new ServerSocket(21)

socket = server.accept()

System.out.println("连接成功")

System.out.println("**********************************")

System.out.println("")

InputStream in =socket.getInputStream()

OutputStream out = socket.getOutputStream()

DataInputStream din = new DataInputStream(in)

DataOutputStream dout=new DataOutputStream(out)

System.out.println("请等待验证客户信息....")

while(true){

s = din.readUTF()

if(s.trim().equals("LOGIN "+user)){

s = "请输入密码:"

dout.writeUTF(s)

s = din.readUTF()

if(s.trim().equals(password)){

s = "连接成功。"

dout.writeUTF(s)

break

}

else{s ="密码错误,请重新输入用户名:"<br> dout.writeUTF(s)<br> <br> }

}

else{

s = "您输入的命令不正确或此用户不存在,请重新输入:"

dout.writeUTF(s)

}

}

System.out.println("验证客户信息完毕....")while(true){

System.out.println("")

System.out.println("")

s = din.readUTF()

if(s.trim().equals("DIR")){

String output = ""

File file = new File(initDir)

String[] dirStructure = new String[10]

dirStructure= file.list()

for(int i=0i<dirStructure.lengthi++){

output +=dirStructure[i]+"\n"

}

s=output

dout.writeUTF(s)

}

else if(s.startsWith("GET")){

s = s.substring(3)

s = s.trim()

File file = new File(initDir)

String[] dirStructure = new String[10]

dirStructure= file.list()

String e= s

int i=0

s ="不存在"

while(true){

if(e.equals(dirStructure[i])){

s="存在"

dout.writeUTF(s)

RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r")

byte byteBuffer[]= new byte[1024]

int amount

while((amount = outFile.read(byteBuffer)) != -1){

dout.write(byteBuffer, 0, amount)break

}break

}

else if(i<dirStructure.length-1){

i++

}

else{

dout.writeUTF(s)

break

}

}

}

else if(s.startsWith("PUT")){

s = s.substring(3)

s = s.trim()

RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw")

byte byteBuffer[] = new byte[1024]

int amount

while((amount =din.read(byteBuffer) )!= -1){

inFile.write(byteBuffer, 0, amount)break

}

}

else if(s.trim().equals("BYE"))break

else{

s = "您输入的命令不正确或此用户不存在,请重新输入:"

dout.writeUTF(s)

}

}

din.close()

dout.close()

in.close()

out.close()

socket.close()

}

catch(Exception e){

System.out.println("MYFTP关闭!"+e)

}

}}