部分客户端 ckage FTPSERVE;import java.io.*;import java.net.*;public class FTPClient { public static void main(String[] args) throws IOException{ Socket socket = new Socket("127.0.0.1", 3030); Socket dataSocket = null; BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); String response = reader.readLine();//收取来自服务器的连接成功消息 System.out.println(response); BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); String command=null; boolean flag=true; while(true){ System.out.println("input:"); command=sin.readLine(); writer.println(command); writer.flush(); response=reader.readLine(); System.out.println("来自服务器:"+response); if(response.startsWith("230")) break; } while(true){ System.out.println("开启:pasv"); command=sin.readLine(); writer.println(command); writer.flush(); response=reader.readLine(); System.out.println("来自服务器:"+response); if(response.startsWith("227")) break; } String[] info=response.split(","); int port_high=Integer.parseInt(info[4]); int port_low=Integer.parseInt(info[5]); dataSocket=new Socket("127.0.0.1",port_high*256+port_low); System.out.println("dataSocket: "+dataSocket.getLocalPort()); //从数据端口中接收数据 while(flag){ System.out.println("输入命令:"); command=sin.readLine(); if(command.toUpperCase().startsWith("LIST")) {writer.println(command); writer.flush(); response=reader.readLine(); System.out.println("来自服务器:"+response); BufferedReader br = new BufferedReader(new InputStreamReader(dataSocket.getInputStream())); String rs = br.readLine(); while(rs!=null){ System.out.println("来自服务器:"+rs); } response=reader.readLine(); System.out.println("来自服务器:"+response); }
部分服务器 if(command.toUpperCase().startsWith("LIST")){ if(tempsocket==null){ pw.println("请打开被动模式连接数据端口!"); pw.flush(); } else{ list(tempsocket); continue; } } //设置用户的工作目录,即上传和下载文件的位置
private void list(Socket tempsocket) { System.out.println("("+UserName+") ("+clientIp+")> LIST"); try{ pw.println("150 Opening data channel for directory list."); pw.flush(); System.out.println("("+UserName+") ("+clientIp+")> 150 Opening data channel for directory list."); PrintWriter pwr = null; try { pwr= new PrintWriter(new OutputStreamWriter(tempsocket.getOutputStream())); FtpUtil.getDetailList(pwr, dir); } catch (IOException e) { e.printStackTrace(); } try { tempsocket.close(); pwr.close(); } catch (IOException e) { e.printStackTrace(); } pw.println("226 Transfer OK"); pw.flush(); System.out.println("("+UserName+") ("+clientIp+")> 226 Transfer OK"); } catch (Exception e){ pw.println("503 Bad sequence of commands."); pw.flush(); System.out.println("("+UserName+") ("+clientIp+")> 503 Bad sequence of commands."); e.printStackTrace(); } }
class FtpUtil { public static void getDetailList(PrintWriter pw, String path){ System.out.println("获取目录中……"); File dir = new File(path); if (!dir.isDirectory()) { System.out.println("500 No such file or directory./r/n"); pw.println("500 No such file or directory./r/n"); } File[] files = dir.listFiles(); pw.println("total:" + files.length); System.out.println("total:" + files.length); pw.println(); pw.flush(); String modifyDate; for (int i = 0; i < files.length; i++) { modifyDate = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss") .format(new Date(files[i].lastModified())); if (files[i].isDirectory()) { pw.println("drwxr-xr-x ftp ftp 0 " + modifyDate + " " + files[i].getName()); pw.println(); System.out.println("drwxr-xr-x ftp ftp 0 " + modifyDate + " " + files[i].getName()); } else { pw.println("-rw-r-r--1 ftp ftp " + files[i].length() + " " + modifyDate + " " + files[i].getName()); pw.println(); System.out.println("-rw-r-r--1 ftp ftp " + files[i].length() + " " + modifyDate + " " + files[i].getName()); } pw.flush(); } } }
问题是当我输入list时,服务器端会显示出文件列表,但是在客户端显示不出任何,百度了,但是没有解决,,,