Java实现FTP客户端,获得IP和端口号的问题InetAddress ip=InetAddress.getByName(args[0]);//第一个输进来ftp客户端代码java的是ip
int port = Integer.parseInt(args[1]);//e\第二个输进来ftp客户端代码java的是端口号
这两个就是接收参数
怎么用Java开发FTP客户端摘要
本文解释了如何利用库用Java语言编写FTP客户端代码 。它比较了FTP库的一个完全列表 , 演示了每个库的优点和缺点 , 并且帮助决策者为他们的需要选择适当的库 。另外,本文阐述了Fa?ade模式如何在取代一个库时改变管理 。最后,作者Jean-Pierre Norguet讨论并解决了由于缺乏权威性的说明书引起的一些问题 。
让我们假设一个情景:我们要编写一个纯Java应用程序,该程序必须从运行FTP服务器的远程计算机上下载文件 。我们也通过远程文件信息,像名字、日期、或者尺寸,来过滤下载 。
自己来写一个FTP协议处理,尽管是有可能,并且可能很有趣 。但是这样做也有可能有困难、花费长时间、并且有潜在的风险 。既然我们不肯花费时间、精力、或者金钱自己来写一个处理器,那我们推荐使用一个可重用的现有的软件组件 。万维网上有并且大量的库可供使用 。有了一个FTP客户端库,下载一个文件用Java语言编写就像下面一样简单:
FTPClient ftpClient = new FTPClient();
ftpClient.connect("", "user01", "pass1234");
ftpClient.download("C:\\Temp\\", "README.txt");
// Eventually other operations here ...
ftpClient.disconnect();
寻找一个适合我们需要的高质量的Java FTP客户端库并不像他看起来那么简单;它可能相当困难 。要找到一个Java FTP客户端库需要花一些时间 。接着,在我们找到所有的已存在的库之后,我们选哪个?每个库适合不同的需要 。库在质量上是不等的,并且它们的设计有本质的区别 。每个提供一套不同的属性和使用不同类型的行话来描述他们 。
因此,计算和比较FTP客户端库证明是困难而且令人迷惑的 。重复使用已存在的组件是一个值得推荐的过程,但在这个例子中 , 启动它也是令人沮丧的 。并且这有点羞愧:在选好的一个好的FTP库之后,剩下的工作就是例程了 。
本文旨在使选择过程简短、容易、并且有价值 。我首先列出了所有的FTP客户端库 。接着,我定义和描述了库应该用某种方式找到的相关标准的一个表格 。最后,我列出了一个总浏览的矩阵,该矩阵给出了库间相互比较的过程的快速浏览 。所有的信息提供了我们作出一个迅速、可靠、和长期的决定所需的每件事 。
使用JDK(Java 开发工具集)的FTP支持
用于FTP的访问规范是用于注释的请求:959(RFC959) 。Sun Microsystems提供了JDK的一个RFC959执行 。但是它是内部的、非文档化的、并且不提供任何资源 。当RFC959在尚未公开时,它实际上是执行RFC1738、URL规范的一个公共界面的后终端 。如图1 。
图1. 使用JDK的FTP支持 。
RFC1738的一个执行过程在JDK中作为标准给出 。它为基本的FTP传送做一个可推理的工作 。它是公共的、文档化的、并且提供源代码 。要使用它,我们可编写下面语句:
URL url = new URL(";type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload
使用JDK的FTP客户端严格的遵守标准推荐,但它有以下几个说明:
它从根本上区别于第三方的FTP客户端库;这些执行RFC959而不是RFC1738
RFC959用大多数的桌面FTP客户端工具执行 。许多Java程序员使用这些工具连接到FTP服务器上 。作为一个尝试,这些工具及有可能优先于类似的RFC959库 。
URL 和URLConnection类只开放用于通讯的流 。Sun库不为构造原始的FTP服务器响应成为像String、 File、 RemoteFile、 或者 Calendar之类的更合用的Java对象而提供直接支持 。所以我们不得不编写更多的代码 , 只是为了把数据写入一个文件中或者开始一个目录列表 。
正像RFC1738的3.2部分解释的一样,"最优化",FTP URL在每个操作后要求关闭(控制)连接 。这对于传送许多小文件是一种浪费、并且毫无效率 。而且 , 作了特别限制FTP服务器可能把会这样一个通讯开销认为一个是恶毒的网络攻击或者滥用而拒绝提供进一步的服务 。
最后,它缺乏几个有用的属性 。
由于以上所有或者某种原因 , 可优先使用一个第三方的库 。下面部分列出了可供选择的第三方的库 。
见:
求用java写一个ftp服务器客户端程序 。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 ="密码错误,请重新输入用户名:";brdout.writeUTF(s);brbr}
}
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=0;idirStructure.length;i){
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(idirStructure.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);
}
}}
怎样用java开发ftp客户端import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.DefaultListModel;
import javax.swing.JTree;
import sun.net.TelnetInputStream;
import sun.net.;
import sun.net.;
public class Ttt
extends JFrame
implements ActionListener {
FtpClient ftp = null;
private List list = new List();
private JPanel FtpClientFrame = new JPanel(new BorderLayout());
private JPanel FtpClientFrameOne = new JPanel(new FlowLayout(FlowLayout.
LEFT));
private JPanel FtpClientFrameTwo = new JPanel(new GridLayout(1, 8));
private JPanel FtpClientFrameThree = new JPanel(new GridLayout(2, 1));
private JPanel FtpClientFrameFour = new JPanel(new GridLayout(1, 2));
//连接、断开按钮
private JButton linkButton = new JButton("Link");
private JButton breakButton = new JButton("Break");
//连接状态
private JLabel statusLabel = new JLabel();
//用户登录
private JLabel urlLabel = new JLabel("Ftp URL:");
private JLabel usernameLabel = new JLabel("username:");
private JLabel passwordLabel = new JLabel("password:");
private JLabel portLabel = new JLabel("port:");
private JTextField urlTextField = new JTextField(10);
private JTextField usernameTextField = new JTextField(10);
private JTextField passwordTextField = new JTextField(10);
private JTextField portTextField = new JTextField(10);
//本地、远程窗口
DefaultListModel modelList = new DefaultListModel();
private JList localList = new JList();
private JList distanceList = new JList();
JScrollPane localScrollPane = new JScrollPane(localList);
JScrollPane distanceScrollPane = new JScrollPane(distanceList);
//本地、远程目录树
private JTree localTree;
private JTree ServerTree;
public Ttt() {
FtpClientFrameOne.add(linkButton);
FtpClientFrameOne.add(breakButton);
FtpClientFrameOne.add(statusLabel);
FtpClientFrameTwo.add(urlLabel);
FtpClientFrameTwo.add(urlTextField);
FtpClientFrameTwo.add(usernameLabel);
FtpClientFrameTwo.add(usernameTextField);
FtpClientFrameTwo.add(passwordLabel);
FtpClientFrameTwo.add(passwordTextField);
FtpClientFrameTwo.add(portLabel);
FtpClientFrameTwo.add(portTextField);
FtpClientFrameThree.add(FtpClientFrameOne);
FtpClientFrameThree.add(FtpClientFrameTwo);
FtpClientFrameFour.add(localScrollPane);
FtpClientFrameFour.add(list);
FtpClientFrame.add(FtpClientFrameThree, "North");
FtpClientFrame.add(FtpClientFrameFour, "Center");
setContentPane(FtpClientFrame);
setTitle("Ftp客户端");
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
linkButton.addActionListener(this);
breakButton.addActionListener(this);
}
public String getDir(String path) {
String dirName;
int ch;
int begin = 55;
dirName = path.substring(begin).trim();
return dirName;
}
public void loadList() {
StringBuffer buf = new StringBuffer();
int ch;
list.removeAll();
try {
TelnetInputStream t = ;
t.setStickyCRLF(true);
while ( (ch = t.read()) = 0) {
if (ch == '\n') {
list.add(getDir(buf.toString()));
buf.setLength(0);
}
else {
buf.append( (char) ch);
}
}
}
catch (IOException e) {
e.printStackTrace();
}
list.validate();
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == linkButton) {
//连接Ftp服务器
try {
if (ftp != null)
;
statusLabel.setText("连接中,请等待.....");
ftp = new FtpClient(urlTextField.getText());
(usernameTextField.getText(),
passwordTextField.getText());
;
}
catch (FtpLoginException e) {
JOptionPane.showMessageDialog(null, "Login Failure!!!");
e.printStackTrace();
}
catch (IOException e) {
JOptionPane.showMessageDialog(null,
urlTextField.getText()"Connection Failure!!!");
e.printStackTrace();
}
catch (SecurityException e) {
JOptionPane.showMessageDialog(null, "No Purview!!!");
e.printStackTrace();
}
if (urlTextField.getText().equals(""))
JOptionPane.showMessageDialog(null, "Ftp服务器地址不能空!!!");
else if (usernameTextField.getText().equals(""))
JOptionPane.showMessageDialog(null, "用户名不能为空!!!");
else if (passwordTextField.getText().equals(""))
JOptionPane.showMessageDialog(null, "密码不能为空!!!");
else
statusLabel.setText("已连接到Ftp:"urlTextField.getText());
loadList();
}
if (source == breakButton) {
System.exit(0);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Ttt ftpClientFrame = new Ttt();
}
}
收集的一些代码 , 忘记从拿来的了` 你可以看看
如何用java实现ftp客户端程序FTP 的主要操作都是基于各种命令基础之上的 。常用的命令有: · 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式; · 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令); · 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接; · 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机; · 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件 。编程思路 根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令 。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作 。编程技巧说明
【ftp客户端代码java ftp客户端代码vc代码】ftp客户端代码java的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于ftp客户端代码vc代码、ftp客户端代码java的信息别忘了在本站进行查找喔 。
推荐阅读
- 国产手机怎么更换屏幕壁纸,怎么换手机屏幕的壁纸?
- 计算机毕业设计文献查找,计算机论文毕业参考文献
- 电脑钉钉直播显示兼容性,电脑钉钉直播显示兼容性错误
- linux挂载命令6 linux挂载操作
- oracle数据库jvm,Oracle数据库中通过访问能够最快的
- 关于lt10sap的信息
- python截图函数 python 截图
- c语言浮点型形式是什么,c语言浮点型常量是什么
- 卢旺达咖啡区块链,卢旺达咖啡区块链分析