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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。