qq_37810530 2017-03-08 03:03 采纳率: 0%
浏览 1514

关于简单的ftp读取服务器信息读取不了的问题

部分客户端 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时,服务器端会显示出文件列表,但是在客户端显示不出任何,百度了,但是没有解决,,,

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-03-08 16:20
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器