黑马程序员技术交流社区

标题: 上传文件结束,控制台怎么不停止呢? [打印本页]

作者: 陈延真    时间: 2013-6-8 20:51
标题: 上传文件结束,控制台怎么不停止呢?
本帖最后由 陈延真 于 2013-6-9 23:00 编辑

/*
* 读取客户端的数据,并写入服务器的一个地方。最后给客户端一个反馈,上次文件成功
*/
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadServer {
public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(12321);
  Socket s = ss.accept();
  // 获取输入流
  BufferedReader br = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  // 获取输出流
  PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"), true);
  String line = null;
  while ((line = br.readLine()) != null) {
   pw.println(line);
  }
  // 给出反馈
  PrintWriter out = new PrintWriter(s.getOutputStream(), true);
  out.println("上传文件成功");
  // 释放资源
  pw.close();
  s.close();
  ss.close();
}
}









import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class UploadClient {
public static void main(String[] args) throws IOException {
  // 创建客户端Socket对象
  Socket s = new Socket("192.168.3.100", 12321);
  // 封装文件的读取
  BufferedReader br = new BufferedReader(new FileReader(
    "a.java"));
  // 获取输出流
  PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  String line = null;
  while ((line = br.readLine()) != null) {
   pw.println(line);
  }

  // 接收反馈
  BufferedReader brServer = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  String server = brServer.readLine();
  System.out.println (server);
  // 释放资源
  br.close();
  s.close();
}
}



作者: HM刘博    时间: 2013-6-9 00:53
在程序中应该加上文件读取完毕标记,告诉服务器端读取完毕
  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.Socket;

  7. /*
  8. * 两端都处于阻塞状态。
  9. * 原因是文本文件结束后,没有告诉服务器。
  10. * A:自定义结束标记。加入数据有一行正好是over。
  11. * B:使用Socket对象的关闭。关闭通道内的输入或者输出流。
  12. */
  13. public class UploadClient {
  14.         public static void main(String[] args) throws IOException {
  15.                 // 创建客户端Socket对象
  16.                 Socket s = new Socket("192.168.3.100", 12321);

  17.                 // 封装文件的读取
  18.                 BufferedReader br = new BufferedReader(new FileReader(
  19.                                 "InetAddressDemo.java"));
  20.                 // 获取输出流
  21.                 PrintWriter pw = new PrintWriter(s.getOutputStream(), true);

  22.                 String line = null;
  23.                 while ((line = br.readLine()) != null) {
  24.                         pw.println(line);
  25.                 }

  26.                 // 自定义结束
  27.                 // pw.println("over");//在这可以自定义结束标记,如果文件中正好有个over,程序会提前退出,造成数据丢失
  28.                 s.shutdownOutput();//因此在这使用shutdownOutput()这个方法,告诉服务器端文件读取完毕

  29.                 // 接受反馈
  30.                 BufferedReader brServer = new BufferedReader(new InputStreamReader(
  31.                                 s.getInputStream()));
  32.                 String server = brServer.readLine(); // 阻塞
  33.                 System.out.println("server:" + server);

  34.                 // 释放资源
  35.                 br.close();
  36.                 s.close();
  37.         }
  38. }
复制代码

作者: 袁梦希    时间: 2013-6-9 14:49
如果没有加分的大家给我留言
作者: 袁梦希    时间: 2013-6-9 14:49
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2