- 浏览: 48944 次
- 性别:
- 来自: 酆都
文章分类
最新评论
1,首先下载一个免费的ftp服务器,安装并添加用户和设置访问的文件夹,或者自己编写一个ftp服务器.
地址:http://filezilla-project.org/
2.运行ftp客户端程序 ftp.java.
ftp协议是在客户机和服务器之间建立两条连接:控制连接和数据连接.
控制连接用来发送命令,数据连接用来传输数据.
代码如下:
package socket;
import java.net.*;
import java.io.*;
public class Ftp {
Socket ctrlSocket;// 控制用Socket
public PrintWriter ctrlOutput;// 控制输出用的流
public BufferedReader ctrlInput;// 控制输入用的流
final int CTRLPORT = 21;// ftp 的控制用端口
ServerSocket serverDataSocket;
// openConnection方法
// 由地址和端口号构造Socket,形成控制用的流
public void openConnection(String host) throws IOException,
UnknownHostException {
ctrlSocket = new Socket(host, CTRLPORT);
ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
ctrlInput = new BufferedReader(new InputStreamReader(ctrlSocket
.getInputStream()));
}
// closeConnection方法
// 关闭控制用的Socket
public void closeConnection() throws IOException {
ctrlSocket.close();
}
// showMenu方法
// 输出ftp的命令菜单
public void showMenu() {
System.out.println(">Command?");
System.out.print(" 1:ls");
System.out.print(" 2:cd");
System.out.print(" 3:get");
System.out.print(" 4:put");
System.out.print(" 5:ascii");
System.out.print(" 6:binary");
System.out.println(" 7:quit");
}
// getCommand方法
// 读取用户指定的命令序号
public String getCommand() {
String buf = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
while (buf.length() != 1) {
try {
buf = lineread.readLine();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
return (buf);
}
public void doLogin() {
String loginName = "";
String password = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
System.out.println("请输入用户名");
loginName = lineread.readLine();
ctrlOutput.println("USER " + loginName);
ctrlOutput.flush();
System.out.println("请输入口令");
password = lineread.readLine();
ctrlOutput.println("PASS " + password);
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public void doQuit() {
try {
ctrlOutput.println("QUIT ");
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public void doCd() {
String dirName = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
System.out.println("请输入目录名");
dirName = lineread.readLine();
ctrlOutput.println("CWD " + dirName);// CWD命令
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doLs方法
// 取得目录信息
public void doLs() {
try {
int n;
byte[] buff = new byte[65530];
// 建立数据连接
Socket dataSocket = dataConnection("NLST ");
// 准备读取数据用的流
BufferedInputStream dataInput = new BufferedInputStream(dataSocket
.getInputStream());
// 读取目录信息
while ((n = dataInput.read(buff)) > 0) {
System.out.write(buff, 0, n);
}
dataSocket.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// dataConnection方法
// 构造与服务器交换数据用的Socket
// 再用PORT命令将端口通知服务器
public Socket dataConnection(String ctrlcmd) {
String cmd = "PORT "; // PORT存放用PORT命令传递数据的变量
int i;
Socket dataSocket = null;// 传送数据用Socket
try {
// 得到自己的地址
byte[] address = InetAddress.getLocalHost().getAddress();
// 用适当的端口号构造服务器
serverDataSocket = new ServerSocket(0,1);
// 准备传送PORT命令用的数据
for (i = 0; i < 4; ++i)
cmd = cmd + (address[i] & 0xff) + ",";
cmd = cmd + (((serverDataSocket.getLocalPort()) / 256) & 0xff)
+ "," + (serverDataSocket.getLocalPort() & 0xff);
// 利用控制用的流传送PORT命令
ctrlOutput.println(cmd);
ctrlOutput.flush();
// 向服务器发送处理对象命令(LIST,RETR,及STOR)
ctrlOutput.println(ctrlcmd);
ctrlOutput.flush();
// 接受与服务器的连接
dataSocket = serverDataSocket.accept();
serverDataSocket.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
return dataSocket;
}
// doAscii方法
// 设置文本传输模式
public void doAscii() {
try {
ctrlOutput.println("TYPE A");// A模式
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doBinary方法
// 设置二进制传输模式
public void doBinary() {
try {
ctrlOutput.println("TYPE I");// I模式
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doGet方法
// 取得服务器上的文件
public void doGet() {
String fileName = "";
String loafile="";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
int n;
byte[] buff = new byte[1024];
// 指定服务器上的文件名
System.out.println("远程文件名");
fileName = lineread.readLine();
// 在客户端上准备接收用的文件
System.out.println("本地文件");
loafile=lineread.readLine();
File local=new File(loafile);
FileOutputStream outfile = new FileOutputStream(local);
// 构造传输文件用的数据流
Socket dataSocket = dataConnection("RETR " + fileName);
BufferedInputStream dataInput = new BufferedInputStream(dataSocket
.getInputStream());
// 接收来自服务器的数据,写入本地文件
while ((n = dataInput.read(buff)) > 0) {
outfile.write(buff, 0, n);
}
dataSocket.close();
outfile.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doPut方法
// 向服务器发送文件
public void doPut() {
String fileName = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
int n;
byte[] buff = new byte[1024];
FileInputStream sendfile = null;
// 指定文件名
System.out.println("本地文件");
fileName = lineread.readLine();
// 准备读出客户端上的文件
//BufferedInputStream dataInput = new BufferedInputStream(new FileInputStream(fileName));
try {
sendfile = new FileInputStream(fileName);
} catch (Exception e) {
System.out.println("文件不存在");
return;
}
System.out.println("远程文件");
String lonfile=lineread.readLine();
// 准备发送数据的流
Socket dataSocket = dataConnection("STOR " + lonfile);
OutputStream outstr = dataSocket.getOutputStream();
while ((n = sendfile.read(buff)) > 0) {
outstr.write(buff, 0, n);
}
dataSocket.close();
sendfile.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// execCommand方法
// 执行与各命令相应的处理
public boolean execCommand(String command) {
boolean cont = true;
switch (Integer.parseInt(command)) {
case 1: // 显示服务器目录信息
doLs();
break;
case 2: // 切换服务器的工作目录
doCd();
break;
case 3: // 取得服务器上的文件
doGet();
break;
case 4: // 向服务器发送文件
doPut();
break;
case 5: // 文件传输模式
doAscii();
break;
case 6: // 二进制传输模式
doBinary();
break;
case 7: // 处理结束
doQuit();
cont = false;
break;
default: // 其他输入
System.out.println("请选择一个序号");
}
return (cont);
}
// main_proc方法
// 输出ftp的命令菜单,调用各种处理方法
public void main_proc() throws IOException {
boolean cont = true;
try {
doLogin();
while (cont) {
showMenu();
cont = execCommand(getCommand());
}
} catch (Exception e) {
System.err.print(e);
System.exit(1);
}
}
// getMsgs方法
// 启动从控制流收信的线程
public void getMsgs() {
try {
CtrlListen listener = new CtrlListen(ctrlInput);
Thread listenerthread = new Thread(listener);
listenerthread.start();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// main方法
// 建立TCP连接,开始处理
public static void main(String[] arg) {
try {
Ftp f = null;
f = new Ftp();
f.openConnection("192.168.1.100"); // 控制连接建立,设置为自己的IP.
f.getMsgs(); // 启动接收线程
f.main_proc(); // ftp 处理
f.closeConnection(); // 关闭连接
System.exit(0); // 结束程序
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
// 读取控制流的CtrlListen 类
class CtrlListen implements Runnable {
BufferedReader ctrlInput = null;
public CtrlListen(BufferedReader in) {
ctrlInput = in;
}
public void run() {
while (true) {
try {
// 按行读入并输出到标准输出上
System.out.println(ctrlInput.readLine());
} catch (Exception e) {
System.exit(1);
}
}
}
}
3.运行效果:
请输入用户名
220 connect success!
rhx
请输入口令
331 Password required for rhx
3468637
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
230 Logged on
1
200 Port command successful
apache-tomcat-6.0.16.exe
c.txt
c37
fc8
FCKeditor
FCKeditor_0.9.2b.zip
FileZilla_3.1.6_win32-setup.exe
ftp.txt
G08-15n.ppt
h
javaftp
javaftp.rar
jftp.jnlp
JSValidation
jsvalidation-1_0b4.zip
other037.rar
photo
ROOT
Tomcat 5.0
trans.rar
transportSystem
Unix澶嶄範棰�.doc
vc863523445
webapps
鍋ュ悍.doc
鏂板缓鏂囨湰鏂囨。.txt
缃戠粶
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
150 Opening data channel for directory list.
226 Transfer OK
2
请输入目录名
javaftp
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
250 CWD successful. "/javaftp" is current directory.
3
远程文件名
ftpClient.java
本地文件
h:/cc.txt
200 Port command successful
150 Opening data channel for file transfer.
226 Transfer OK
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
4
本地文件
h:/cc.txt
远程文件
ftppp.java
200 Port command successful
150 Opening data channel for file transfer.
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
226 Transfer OK
5
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
200 Type set to A
6
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
200 Type set to I
7
地址:http://filezilla-project.org/
2.运行ftp客户端程序 ftp.java.
ftp协议是在客户机和服务器之间建立两条连接:控制连接和数据连接.
控制连接用来发送命令,数据连接用来传输数据.
代码如下:
package socket;
import java.net.*;
import java.io.*;
public class Ftp {
Socket ctrlSocket;// 控制用Socket
public PrintWriter ctrlOutput;// 控制输出用的流
public BufferedReader ctrlInput;// 控制输入用的流
final int CTRLPORT = 21;// ftp 的控制用端口
ServerSocket serverDataSocket;
// openConnection方法
// 由地址和端口号构造Socket,形成控制用的流
public void openConnection(String host) throws IOException,
UnknownHostException {
ctrlSocket = new Socket(host, CTRLPORT);
ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
ctrlInput = new BufferedReader(new InputStreamReader(ctrlSocket
.getInputStream()));
}
// closeConnection方法
// 关闭控制用的Socket
public void closeConnection() throws IOException {
ctrlSocket.close();
}
// showMenu方法
// 输出ftp的命令菜单
public void showMenu() {
System.out.println(">Command?");
System.out.print(" 1:ls");
System.out.print(" 2:cd");
System.out.print(" 3:get");
System.out.print(" 4:put");
System.out.print(" 5:ascii");
System.out.print(" 6:binary");
System.out.println(" 7:quit");
}
// getCommand方法
// 读取用户指定的命令序号
public String getCommand() {
String buf = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
while (buf.length() != 1) {
try {
buf = lineread.readLine();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
return (buf);
}
public void doLogin() {
String loginName = "";
String password = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
System.out.println("请输入用户名");
loginName = lineread.readLine();
ctrlOutput.println("USER " + loginName);
ctrlOutput.flush();
System.out.println("请输入口令");
password = lineread.readLine();
ctrlOutput.println("PASS " + password);
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public void doQuit() {
try {
ctrlOutput.println("QUIT ");
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public void doCd() {
String dirName = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
System.out.println("请输入目录名");
dirName = lineread.readLine();
ctrlOutput.println("CWD " + dirName);// CWD命令
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doLs方法
// 取得目录信息
public void doLs() {
try {
int n;
byte[] buff = new byte[65530];
// 建立数据连接
Socket dataSocket = dataConnection("NLST ");
// 准备读取数据用的流
BufferedInputStream dataInput = new BufferedInputStream(dataSocket
.getInputStream());
// 读取目录信息
while ((n = dataInput.read(buff)) > 0) {
System.out.write(buff, 0, n);
}
dataSocket.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// dataConnection方法
// 构造与服务器交换数据用的Socket
// 再用PORT命令将端口通知服务器
public Socket dataConnection(String ctrlcmd) {
String cmd = "PORT "; // PORT存放用PORT命令传递数据的变量
int i;
Socket dataSocket = null;// 传送数据用Socket
try {
// 得到自己的地址
byte[] address = InetAddress.getLocalHost().getAddress();
// 用适当的端口号构造服务器
serverDataSocket = new ServerSocket(0,1);
// 准备传送PORT命令用的数据
for (i = 0; i < 4; ++i)
cmd = cmd + (address[i] & 0xff) + ",";
cmd = cmd + (((serverDataSocket.getLocalPort()) / 256) & 0xff)
+ "," + (serverDataSocket.getLocalPort() & 0xff);
// 利用控制用的流传送PORT命令
ctrlOutput.println(cmd);
ctrlOutput.flush();
// 向服务器发送处理对象命令(LIST,RETR,及STOR)
ctrlOutput.println(ctrlcmd);
ctrlOutput.flush();
// 接受与服务器的连接
dataSocket = serverDataSocket.accept();
serverDataSocket.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
return dataSocket;
}
// doAscii方法
// 设置文本传输模式
public void doAscii() {
try {
ctrlOutput.println("TYPE A");// A模式
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doBinary方法
// 设置二进制传输模式
public void doBinary() {
try {
ctrlOutput.println("TYPE I");// I模式
ctrlOutput.flush();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doGet方法
// 取得服务器上的文件
public void doGet() {
String fileName = "";
String loafile="";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
int n;
byte[] buff = new byte[1024];
// 指定服务器上的文件名
System.out.println("远程文件名");
fileName = lineread.readLine();
// 在客户端上准备接收用的文件
System.out.println("本地文件");
loafile=lineread.readLine();
File local=new File(loafile);
FileOutputStream outfile = new FileOutputStream(local);
// 构造传输文件用的数据流
Socket dataSocket = dataConnection("RETR " + fileName);
BufferedInputStream dataInput = new BufferedInputStream(dataSocket
.getInputStream());
// 接收来自服务器的数据,写入本地文件
while ((n = dataInput.read(buff)) > 0) {
outfile.write(buff, 0, n);
}
dataSocket.close();
outfile.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// doPut方法
// 向服务器发送文件
public void doPut() {
String fileName = "";
BufferedReader lineread = new BufferedReader(new InputStreamReader(
System.in));
try {
int n;
byte[] buff = new byte[1024];
FileInputStream sendfile = null;
// 指定文件名
System.out.println("本地文件");
fileName = lineread.readLine();
// 准备读出客户端上的文件
//BufferedInputStream dataInput = new BufferedInputStream(new FileInputStream(fileName));
try {
sendfile = new FileInputStream(fileName);
} catch (Exception e) {
System.out.println("文件不存在");
return;
}
System.out.println("远程文件");
String lonfile=lineread.readLine();
// 准备发送数据的流
Socket dataSocket = dataConnection("STOR " + lonfile);
OutputStream outstr = dataSocket.getOutputStream();
while ((n = sendfile.read(buff)) > 0) {
outstr.write(buff, 0, n);
}
dataSocket.close();
sendfile.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// execCommand方法
// 执行与各命令相应的处理
public boolean execCommand(String command) {
boolean cont = true;
switch (Integer.parseInt(command)) {
case 1: // 显示服务器目录信息
doLs();
break;
case 2: // 切换服务器的工作目录
doCd();
break;
case 3: // 取得服务器上的文件
doGet();
break;
case 4: // 向服务器发送文件
doPut();
break;
case 5: // 文件传输模式
doAscii();
break;
case 6: // 二进制传输模式
doBinary();
break;
case 7: // 处理结束
doQuit();
cont = false;
break;
default: // 其他输入
System.out.println("请选择一个序号");
}
return (cont);
}
// main_proc方法
// 输出ftp的命令菜单,调用各种处理方法
public void main_proc() throws IOException {
boolean cont = true;
try {
doLogin();
while (cont) {
showMenu();
cont = execCommand(getCommand());
}
} catch (Exception e) {
System.err.print(e);
System.exit(1);
}
}
// getMsgs方法
// 启动从控制流收信的线程
public void getMsgs() {
try {
CtrlListen listener = new CtrlListen(ctrlInput);
Thread listenerthread = new Thread(listener);
listenerthread.start();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
// main方法
// 建立TCP连接,开始处理
public static void main(String[] arg) {
try {
Ftp f = null;
f = new Ftp();
f.openConnection("192.168.1.100"); // 控制连接建立,设置为自己的IP.
f.getMsgs(); // 启动接收线程
f.main_proc(); // ftp 处理
f.closeConnection(); // 关闭连接
System.exit(0); // 结束程序
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
// 读取控制流的CtrlListen 类
class CtrlListen implements Runnable {
BufferedReader ctrlInput = null;
public CtrlListen(BufferedReader in) {
ctrlInput = in;
}
public void run() {
while (true) {
try {
// 按行读入并输出到标准输出上
System.out.println(ctrlInput.readLine());
} catch (Exception e) {
System.exit(1);
}
}
}
}
3.运行效果:
请输入用户名
220 connect success!
rhx
请输入口令
331 Password required for rhx
3468637
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
230 Logged on
1
200 Port command successful
apache-tomcat-6.0.16.exe
c.txt
c37
fc8
FCKeditor
FCKeditor_0.9.2b.zip
FileZilla_3.1.6_win32-setup.exe
ftp.txt
G08-15n.ppt
h
javaftp
javaftp.rar
jftp.jnlp
JSValidation
jsvalidation-1_0b4.zip
other037.rar
photo
ROOT
Tomcat 5.0
trans.rar
transportSystem
Unix澶嶄範棰�.doc
vc863523445
webapps
鍋ュ悍.doc
鏂板缓鏂囨湰鏂囨。.txt
缃戠粶
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
150 Opening data channel for directory list.
226 Transfer OK
2
请输入目录名
javaftp
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
250 CWD successful. "/javaftp" is current directory.
3
远程文件名
ftpClient.java
本地文件
h:/cc.txt
200 Port command successful
150 Opening data channel for file transfer.
226 Transfer OK
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
4
本地文件
h:/cc.txt
远程文件
ftppp.java
200 Port command successful
150 Opening data channel for file transfer.
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
226 Transfer OK
5
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
200 Type set to A
6
>Command?
1:ls 2:cd 3:get 4:put 5:ascii 6:binary 7:quit
200 Type set to I
7
发表评论
-
设计模式(24)- 访问者模式
2018-01-26 20:56 464访问者模式 1.定义 表示一个作用于某对象 ... -
设计模式(23)- 桥接模式
2018-01-25 08:39 328桥接模式 1.定义 将抽象部分与它的实现部 ... -
设计模式(22)- 职责者模式
2018-01-23 09:07 413职责者模式 1.定义 使多个对象都有机会处理 ... -
设计模式(21)- 装饰者模式
2018-01-21 20:47 298装饰者模式 1.定义 动态的给一个对象添加一 ... -
设计模式(20)- 解释器模式
2018-01-21 19:46 306解释器模式 1.定义 给定一个语言,定义它的文 ... -
设计模式(19)- 享元模式
2018-01-21 18:42 301享元模式 1.定义 运用共享技术,有效的支 ... -
设计模式(18)- 备忘录模式
2018-01-20 18:28 348备忘录模式 1.定义 在不破坏封装性的前提 ... -
设计模式(17)- 状态模式
2018-01-20 17:11 425状态模式 1.定义 允许一个对象在其内 ... -
设计模式(16)- 策略模式
2018-01-20 16:13 335策略模式 1.定义 定义一系列的算法,把它 ... -
设计模式(15)- 模板方法模式
2018-01-20 15:42 443模板方法模式 1.定义 定义一个操作中的 ... -
设计模式(14)- 组合模式
2018-01-14 14:03 303组合模式 1.定义 将对象组合成树形结构,以 ... -
设计模式(13)- 迭代器模式
2018-01-14 12:04 350迭代器模式 1.定义 提供一种方法,顺序 ... -
设计模式(12)- 命令模式
2018-01-13 14:48 392命令模式 1.定义 ... -
设计模式(11)- 观察者模式
2018-01-13 14:08 462观察者模式 1.定义 定义对象间的一种一对 ... -
设计模式(10)- 代理模式
2018-01-13 13:32 374代理模式 1.定义 为其他对象提供一种 ... -
设计模式(9)- 中介者模式
2018-01-13 12:57 269中介者模式 1.定义 用一个中介对象来封装 ... -
设计模式(8)- 原型模式
2018-01-13 12:02 408原型模式 1.定义 用原型模式指定创建对象 ... -
设计模式(7)- 生成器模式
2018-01-07 21:51 420生成器模式 1.定义 将复杂对象的构件和 ... -
设计模式(6)- 抽象工厂模式
2018-01-07 20:19 418抽象工厂模式 1.定义 提供一个创建一系 ... -
设计模式(5)- 工厂方法模式
2018-01-07 14:14 403工厂方法模式 1.定义 定义个 ...
相关推荐
本项目是使用java Socket编程实现的一个简单的FTP服务器和客户端。 客户端目前实现的功能是登录,刷新,上传和下载。同时具有主动模式和被动模式两种模式。 服务器端实现的功能有登录、刷新、上传、下载、列出文件...
Java作为一种通用的、面向对象的编程语言,提供了丰富的库来支持FTP客户端和服务端的实现。 在Java中,我们可以使用`java.net.Socket`类来创建客户端连接,它代表了两台机器之间的网络连接。Socket编程是基于TCP/IP...
Java提供了一系列的API,如`java.net.Socket`和`java.io`包中的类,使得开发FTP客户端成为可能。在本文中,我们将深入探讨如何使用Java实现FTP客户端,并通过实际的代码示例来解释关键概念。 首先,理解FTP的工作...
在`ftpclient.txt`文件中,可能包含了一个简单的Java FTP客户端实现代码示例,演示了如何连接FTP服务器、上传和下载文件。通常,一个基本的FTP客户端程序会包含以下步骤: 1. 创建`FTPClient`对象。 2. 连接服务器,...
此外,`org.apache.commons.net.ftp`库提供了一套完整的FTP客户端实现,简化了上述操作。 在描述中提到的“java写的ftp程序”,可能就是利用Apache Commons Net库或者Java内置的Socket类来实现的。这个程序可能包含...
在Java中实现FTP客户端,主要涉及到Java的`java.net`和`java.io`包,以及可能的`javax.net.ssl`包,用于处理SSL/TLS加密连接。 以下是一些关键的Java FTP客户端编程知识点: 1. **FTP连接**:使用`java.net.Socket...
2. Java FTP客户端实现: 在Java中,`java.net.Socket`类可以用来建立与FTP服务器的连接,而`java.io`包中的输入/输出流则负责数据的传输。此外,`org.apache.commons.net.ftp`库(如`FTPClient`和`FTP pymysql`)...
2. **Java FTP客户端库**:Java标准库中并没有直接提供FTP客户端,但可以通过`java.net.Socket`类模拟实现。不过,更常见的是使用Apache Commons Net库,它提供了`FTPClient`类,简化了FTP客户端的开发。 3. **...
因此,我们需要使用第三方库或Java内置的`javax.net.ssl.SSLSocket`(用于加密的FTP,即FTPS)来构建FTP客户端和服务器。 对于Java实现FTP服务器,我们可以使用Apache的Commons Net库。这个库提供了一个`FTPServer`...
用java实现的ftp客户端,功能完善,可以实现上传、下载、新建远程文件夹、删除、修改远程目录等功能,端口号默认为20,可以在网络设置界面修改。底层采用socket传输数据。带源码,注释相当详细。
FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,而使用Java来实现FTP客户端则需要掌握Java的Socket编程、多线程以及文件I/O等技术。 在Java中,我们可以使用`java.net.Socket`类来建立与...
3. **Java FTPClient库**:Java标准库并没有内置完整的FTP客户端实现,但Apache的Commons Net库提供了一个名为`FTPClient`的类,极大地简化了FTP操作。你可以通过添加Apache Commons Net的依赖来使用这个类。 4. **...
本项目"基于Java的FTP客户端设计与实现"旨在利用Java语言构建一个能够连接到FTP服务器,实现登录、文件上传和下载等功能的客户端程序。 首先,要实现FTP客户端,我们需要理解FTP的工作原理。FTP基于TCP/IP协议,...
在开发Java FTP客户端时,理解FTP协议的运作机制和Java网络编程基础至关重要。同时,选择合适的UI框架和FTP库可以提高开发效率,提供稳定和高效的服务。对于初学者来说,可以从简单的命令行FTP客户端开始,逐步增加...
Java编写的FTP客户端程序是一种基于Java编程语言实现的软件,用于与FTP(文件传输协议)服务器进行交互。FTP是互联网上广泛使用的标准协议,用于在客户端和服务器之间传输文件。以下是一些关于Java FTP客户端程序的...
在这个"ftp.rar"压缩包中,我们关注的是一个用Java语言实现的FTP客户端。Java是一种跨平台的编程语言,它提供了丰富的库和API,使得开发FTP客户端成为可能。 FTP客户端是允许用户连接到FTP服务器并执行各种操作,...
`org.apache.commons.net.ftp.FTPClient`是Apache Commons Net库提供的一个强大FTP客户端实现。它封装了FTP命令的发送和解析,提供了丰富的API,如`connect()`, `login()`, `binaryMode()`, `upload()`, `download...
Socket FTP客户端程序是一种基于计算机网络技术的应用,主要利用Socket编程接口和FTP(文件传输协议)来实现在网络间上传和下载文件的功能。本项目提供的FTP客户端程序可能还处于开发阶段,功能并不全面,但可以作为...
在这个"java_ftp.rar"压缩包中,包含了一个Java实现的FTP客户端和服务端,它们提供了FTP的基本功能,并且服务端还增加了命令控制。 首先,我们要理解FTP客户端的角色。FTP客户端允许用户从远程服务器上传或下载文件...