黑马程序员技术交流社区

标题: 网络编程TCP文件复制中结束标记 [打印本页]

作者: 黑马朱超    时间: 2013-4-16 18:48
标题: 网络编程TCP文件复制中结束标记
  1. import java.io.*;
  2. import java.net.*;

  3. class TextClient
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s = new Socket("192.168.1.101",10006);
  8.                 BufferedReader bufr = new BufferedReader(new FileReader("C:\\info.txt"));

  9.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  10. DataOutputStream dos = new DataOutputStream(s.getOutputStream());//不合传输的文件的数据流混在一起
  11. long time = System.currentTimeMillis();
  12. dos.writeLong(time);
  13. System.out.println("第一次"+time);



  14.                 String line = null;

  15.                 while((line = bufr.readLine()) != null)
  16.                 {
  17.                         out.println(line);
  18.                 }

  19. dos.writeLong(time);
  20. System.out.println("第二次"+time);

  21. //                s.shutdownOutput();

  22.                
  23.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

  24.                 String str = bufIn.readLine();

  25.                 System.out.println(str);

  26.                 bufr.close();

  27.                 s.close();

  28.         }
  29. }
  30. class TextServer
  31. {
  32.         public static void main(String[] args) throws Exception
  33.         {
  34.                 ServerSocket ss = new ServerSocket(10006);

  35.                 Socket s =ss.accept();

  36.                 String ip = s.getInetAddress().getHostAddress();

  37.                 System.out.println(ip+"客户端连接");


  38.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

  39.                 PrintWriter out = new PrintWriter(new FileWriter("C:\\whataup.txt"),true);
  40. //接收时间戳标记
  41. DataInputStream dis = new DataInputStream(s.getInputStream());
  42. long l = dis.readLong();
  43. System.out.println("服务端第一次"+l);

  44.                 String line = null;

  45.                 while((line = bufIn.readLine()) != null )
  46.                 {
  47.                         /*时间戳标记判断结束*/
  48.                         out.println(line);


  49.                 }
  50.                 PrintWriter feedback = new PrintWriter(s.getOutputStream(),true);
  51.                
  52.                                 feedback.println("上传成功");
  53.                     dis.close();
  54.                                         out.close();
  55.                 s.close();
  56.         }
  57. }



  58. 对于用时间戳来结束服务器端的语句,那个判断语句我一直写不对,有人能帮忙不?

复制代码

作者: 王洪宇    时间: 2013-4-16 21:25
给你个建议吧,不知道有没有用。
你客户端发送时间的时候也使用PrintWriter,
发送文件之前先发一遍,服务器端接收。
然后客户端循环发送读到的文件内容,服务端循环接收。
客户端文件发送完之后再发一遍时间,服务端此时还是在循环接收中。
服务端可以在循环中进行判断,如果接收到的字符串等于前面接收到的时间,就break跳出循环。

作者: 黑马朱超    时间: 2013-4-16 22:09
王洪宇 发表于 2013-4-16 21:25
给你个建议吧,不知道有没有用。
你客户端发送时间的时候也使用PrintWriter,
发送文件之前先发一遍,服务器 ...

正好问你下,这个通过不同的流对象传入到 客户端的输出流的话, 服务端里面的输入流都可以取到么,用不用分开取?
作者: 王洪宇    时间: 2013-4-16 22:18
黑马朱超 发表于 2013-4-16 22:09
正好问你下,这个通过不同的流对象传入到 客户端的输出流的话, 服务端里面的输入流都可以取到么,用不用 ...

:shutup:不了解,没做过实验,不好说。
你做做实验吧。
唉!值得探索的地方还有好多!!
作者: 黑马朱超    时间: 2013-4-16 22:31
王洪宇 发表于 2013-4-16 22:18
不了解,没做过实验,不好说。
你做做实验吧。
唉!值得探索的地方还有好多!! ...

恩,好的。等我考进了黑马....就鼓捣鼓捣先,哈哈




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