//FtpClientApplet.java
import sun.net.ftp.*;
import sun.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
public class FtpClientApplet extends Applet
{
FtpClient aftp;//实例化一个客户端对象
DataOutputStream outputs ;//数据输出字符串
TelnetInputStream ins;//Telnet输入字符串
TelnetOutputStream outs;//Telnet输出字符串
TextArea lsArea;//文本区域
Label LblPrompt;//标签提示
Button BtnConn;//连接主机按钮
Button BtnClose;//断开与主机的连接按钮
Button BtnQuit;//退出按钮
TextField TxtUID;//用户名输入区
TextField TxtPWD;//密码输入区
TextField TxtHost;//主机名输入区
int ch;//读出的字符
public String outFlagStr="没有连接主机";//提示给用户的标志字符,反应连接的状态
String hostname="";//主机名称
public void init () { //初始化函数
setBackground(Color.white);
setLayout(new GridBagLayout());//布局方式
GridBagConstraints GBC = new GridBagConstraints();//布局容器
LblPrompt = new Label("请连接主机");//初始化状态提示
LblPrompt.setAlignment(Label.CENTER);//状态提示的位置
BtnConn = new Button("连接");//初始化
BtnClose = new Button("断开");//初始化
BtnClose.enable(false);//初始化
BtnQuit = new Button("退出");
TxtUID = new TextField("anonymous",15);//初始化
TxtPWD = new TextField("",15);//初始化
TxtPWD.setEchoCharacter('*');//密码的显示方法
TxtHost = new TextField("",20);//初始化
Label LblGood = new Label("*********************************************");//初始化
LblGood.setAlignment(Label.CENTER);
Label LblGood1 = new Label("*********************************************");//初始化
LblGood1.setAlignment(Label.CENTER);
Label LblGetFile = new Label("获取的文件如下:");//初始化
LblGetFile.setAlignment(Label.CENTER);
Label LblUID = new Label("User ID:");//初始化
Label LblPWD = new Label("PWD:");//初始化
Label LblHost = new Label("Host:");//初始化
lsArea = new TextArea(30,80);//初始化,30行,80列
lsArea.setEditable(false);//不可编辑
GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件的前修饰
((GridBagLayout)getLayout()).setConstraints(LblGood,GBC);
add(LblGood);
GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件
GBC.fill = GridBagConstraints.HORIZONTAL;
((GridBagLayout)getLayout()).setConstraints(LblPrompt,GBC);
add(LblPrompt);
GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件的后修饰
((GridBagLayout)getLayout()).setConstraints(LblGood1,GBC);
add(LblGood1);
GBC.gridwidth=1; //添加第二行控件
((GridBagLayout)getLayout()).setConstraints(LblHost,GBC);
add(LblHost);
GBC.gridwidth=GridBagConstraints.REMAINDER;
((GridBagLayout)getLayout()).setConstraints(TxtHost,GBC);
add(TxtHost);
GBC.gridwidth=1; //添加第三行控件
((GridBagLayout)getLayout()).setConstraints(LblUID,GBC);
add(LblUID);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(TxtUID,GBC);
add(TxtUID);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(LblPWD,GBC);
add(LblPWD);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(TxtPWD,GBC);
add(TxtPWD);
GBC.gridwidth=1;
GBC.weightx=3;//把第三行剩余的空间平均分为三个,用来放剩下的三个按钮
((GridBagLayout)getLayout()).setConstraints(BtnConn,GBC);
add(BtnConn);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(BtnClose,GBC);
add(BtnClose);
GBC.gridwidth=GridBagConstraints.REMAINDER;
((GridBagLayout)getLayout()).setConstraints(BtnQuit,GBC);
add(BtnQuit);
GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第四行控件的前修饰
((GridBagLayout)getLayout()).setConstraints(LblGetFile,GBC);
add(LblGetFile);
GBC.gridwidth=GridBagConstraints.REMAINDER; //添加第四行控件
GBC.fill = GridBagConstraints.HORIZONTAL;//当要下载的文件名过长时采取水平延伸显示区域的方式来存放
((GridBagLayout)getLayout()).setConstraints(lsArea,GBC);
add(lsArea);
}
public boolean connect(String hostname,String uid,String pwd)//连接主机
{
this.hostname = hostname;
LblPrompt.setText("正在连接,请等待.....");
try{
aftp =new FtpClient(hostname);//连接主机
aftp.login(uid,pwd);//登陆主机
aftp.binary();//文件以二进制的方式传送
showFileContents();//显示获取的文件
}
catch(FtpLoginException e){
outFlagStr="无权限与主机:"+hostname+"连接!";
LblPrompt.setText(outFlagStr);
return false;
}
catch (IOException e){
outFlagStr="连接主机:"+hostname+"失败!";
LblPrompt.setText(outFlagStr);
return false;
}
catch(SecurityException e)
{
outFlagStr="无法与主机:"+hostname+"连接!用户名或密码错误!";
LblPrompt.setText(outFlagStr);
return false;
}
LblPrompt.setText("连接主机:"+hostname+"成功!");
return true;
}
public void stop(){
try{
aftp.closeServer();//关闭与服务器的连接
}
catch(IOException e){
outFlagStr="关闭与服务器:"+hostname+"的连接失败!";
LblPrompt.setText(outFlagStr);
return;
}
}
public void paint(Graphics g){//图形类接口
}
public boolean action(Event evt,Object obj){//给按钮添加相应的动作
if (evt.target == BtnConn){
LblPrompt.setText("正在连接,请等待.....");
if (connect(TxtHost.getText(),TxtUID.getText(),TxtPWD.getText())){
BtnConn.setEnabled(false);
BtnClose.setEnabled(true);
}
return true;
}
if (evt.target == BtnClose){
stop();
BtnConn.enable(true);
BtnClose.enable(false);
LblPrompt.setText("与主机"+hostname+"连接已断开!");
return true;
}
if (evt.target == BtnQuit){
System.exit(0);
return true;
}
return super.action(evt,obj);
}
public boolean sendFile(String filepathname){//发送文件,上传文件
boolean result=true;
if (aftp != null){
LblPrompt.setText("正在粘贴文件,请耐心等待....");
String contentperline;
try{
outFlagStr="粘贴成功!";
String fg =new String("//");
int index = filepathname.lastIndexOf(fg);
String filename = filepathname.substring(index+1);
File localFile ;
localFile = new File(filepathname) ;
RandomAccessFile sendFile = new RandomAccessFile(filepathname,"r");
//
sendFile.seek(0);
outs = aftp.put(filename);
outputs = new DataOutputStream(outs);
while (sendFile.getFilePointer() < sendFile.length() ){
ch = sendFile.read();
outputs.write(ch);
}
outs.close();
sendFile.close();
}
catch(IOException e){
outFlagStr = "粘贴失败!";
result = false ;
}
LblPrompt.setText(outFlagStr);
showFileContents();
}
else{
result = false;
}
return result;
}
public void showFileContents(){//显示获取的ftp文件的内容
StringBuffer buf = new StringBuffer();
lsArea.setText("");
try{
ins= aftp.list();
while ((ch=ins.read())>=0){
buf.append((char)ch);
}
lsArea.appendText(buf.toString());
ins.close();
}
catch(IOException e){
// outFlagStr = "粘贴失败!";
}
}
public static void main(String args[]){
Frame f = new Frame("FTP Client--version 1.0 by cuiweibing--");
f.addWindowListener(new WindowAdapter(){//添加关闭功能
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
FtpClientApplet ftp = new FtpClientApplet();
ftp.init();
ftp.start();
f.add(ftp);//把容器上的控件加到Frame
f.pack();//显示
f.setVisible(true);
}
public FtpClientApplet() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception { }}