bconnect.setText(\连接\ bconnect.addActionListener(new mainView_bconnect_actionAdapter(this)); bdisconnect.setText(\断开连接\ bdisconnect.addActionListener(new mainView_bdisconnect_actionAdapter(this)); lPane.setBackground(Color.gray); lPane.setLayout(borderLayout1); sPane.setBackground(Color.gray); sPane.setLayout(borderLayout2); bDownload.setText(\下载\ bDownload.addActionListener(new mainView_bDownload_actionAdapter(this)); remoteList.addMouseListener(new mainView_remoteList_mouseAdapter(this));
contentPane.add(jPanel1, new XYConstraints(5, 8, 265, 349)); jPanel1.add(jLabel1, new XYConstraints(7, 27, 43, 17)); jPanel1.add(server, new XYConstraints(69, 13, 170, 30)); jPanel1.add(jLabel2, new XYConstraints(7, 69, 46, 18)); jPanel1.add(jLabel3, new XYConstraints(7, 109, 49, 21)); jPanel1.add(jLabel4, new XYConstraints(7, 149, -1, 18)); jPanel1.add(port, new XYConstraints(69, 58, 170, 30)); jPanel1.add(user, new XYConstraints(69, 104, 170, 30)); jPanel1.add(pw, new XYConstraints(69, 148, 170, 30)); jPanel1.add(bdisconnect, new XYConstraints(142, 267, -1, -1)); jPanel1.add(bconnect, new XYConstraints(24, 267, 83, -1)); sPane.add(jScrollPane2, java.awt.BorderLayout.CENTER); jScrollPane2.getViewport().add(statusList);
contentPane.add(bDownload, new XYConstraints(24, 398, 212, 78)); contentPane.add(lPane, new XYConstraints(290, 53, 467, 203)); lPane.add(jScrollPane1, java.awt.BorderLayout.CENTER); contentPane.add(sPane, new XYConstraints(290, 327, 467, 198)); contentPane.add(jLabel6, new XYConstraints(287, 301, 118, 27)); contentPane.add(jLabel5, new XYConstraints(291, 23, 133, 28));
jScrollPane1.getViewport().add(remoteList);
remoteList.setModel(new javax.swing.AbstractListModel() {
String[] strings = { \ 欢迎使用 tFTPClient!\用法:\在左边输入相应信息后按 【连接】按钮,连接FTP服务器\
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; } });
}
登录验证服务器代码:
private void connectHandler(java.awt.event.ActionEvent evt) { String anonymous = \ String anpassword = \ String dMessage = null;
String dTitle = \
int dType = JOptionPane.ERROR_MESSAGE;
if(evt.getSource() == bconnect){
if(server.getText().length() == 0){
dMessage = \请输入FTP服务器的Host/IP地址\
JOptionPane.showMessageDialog( null,dMessage,dTitle,dType);
return; }
if(user.getText().length() == 0 && !jCheckBox2.isSelected()){ dMessage = \请输入用户帐号\
JOptionPane.showMessageDialog( null,dMessage,dTitle,dType);
return;
}
datsktsvr = new ServerSocket(0);// 获得一个随机端口 port = datsktsvr.getLocalPort(); // 设置 host&port
StringBuilder cmd = new StringBuilder(\
cmd.append(ctlskt.getLocalAddress().getHostAddress()); //返回InetAddress 对象的“X.Y.W.Z”形式的IP地址
for (int i = 0; i < cmd.length(); i++) {
// 把 202.168.255.255 形式 转换成 202,168,255,255 形式
if ('.' == cmd.charAt(i)) cmd.setCharAt(i, ','); }
// port = secondlast*256 + last cmd.append(\
cmd.append(Integer.toString(port / 256)); cmd.append(\
cmd.append(Integer.toString(port & 0xFF)); status = sendCmd(cmd.toString()); if (status != 200) // 200 命令正确 return -1;
status = sendCmd(datCmd); // 等待远程服务器的连接 datskt = datsktsvr.accept(); }
return 0;
界面与登录图:
图5 登录实现界面图
4.3 浏览程序
我们利用FtpClient控件可以实现FTP客户端应用程序的浏览功能,浏览功能的实现程序由浏览服务器端文件和浏览本地文件两部分组成。
4.3.1浏览服务器端目录程序
当连接登录成功之后,可使用FtpClient控件的List()方法执行FTP服务器端上的目录浏览(List)功能,以取得FTP服务器默认的目录内容。一般List方法会列出FTP端目录与文件的详细内容,包括创建文件日期,文件大小,目录与文件的名称等相关信息。当然,FTP服务器端必须开放目录读取的权限,以允许连接登录及浏览目录,否则,Connect方法会执行失败。而这个方法执行后的结果是TelnetInputStream数据流,本系统要把它显示在一个列表框中,还需要进行分解操作。下面是对列表框进行操作的程序代码: */
protected FileInfo readFileInfo(String fileInfo,int system){ String[] temp = fileInfo.split(\
boolean isDir = false;
if(system == FileInfo.UNIX){
//-rwxrw-r-- 1 user group 3014 Nov 12 14:57 cwinvnc337.ESn // 0 1 2 3 4 5 6 7 8
String[] parts = new String[9]; int j = 0;
for(int i =0; i
parts[j] = temp[i]; j++; } }
if(j==9){
parts[8] = getFileName(fileInfo,52);//if the file name contains space }
//check is a dir or a file
isDir = (parts[0].charAt(0)=='d'); return new
FileInfo(FileInfo.UNIX,parts[0],parts[1],parts[2],parts[3],parts[4],parts[5]+\ }else if(system == FileInfo.DOS){
//02-23-05 09:24AM 2245 readme.ESn
// 0 1 2 3 String[] parts = new String[4]; int j = 0;
for(int i =0; i
parts[j] = temp[i]; j++; } }
if(j>3)
parts[3] = getFileName(fileInfo, 20);//unknow system //check is a dir or a file
isDir = (parts[2].equals(\ return new