A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄鸿达 于 2013-2-21 23:28 编辑
  1. import java.io.*;
  2. import java.net.*;
  3. public class Send2 {
  4.         
  5.         public static void main(String[] args) throws Exception {
  6.         
  7.                         Socket s=new Socket(InetAddress.getLocalHost().getHostAddress(),12650);

  8.                         BufferedReader br=
  9.                                 new BufferedReader(new FileReader("D:\\1.txt"));
  10.                         BufferedWriter bw=
  11.                                 new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  12.                         
  13.                         String len=null;
  14.                         while((len=br.readLine())!=null){
  15.                                 bw.write(len);
  16.                                 bw.newLine();
  17.                                 bw.flush();
  18.                         }
  19.                         System.out.print("1");
  20.                         BufferedReader bbr=
  21.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  22.                         System.out.print("2");
  23.                         while((len=bbr.readLine())!=null){
  24.                                 System.out.print("我写2-1");
  25.                                 System.out.print(len);
  26.                                 System.out.print("我写2-2");
  27.                         }
  28.                         System.out.print("2-1");
  29.                         bw.close();
  30.                         br.close();
  31.                         //s.close();
  32. }
  33. }
复制代码
  1. import java.io.*;
  2. import java.net.*;
  3. public class Re2 {
  4.         public static void main(String[] args)throws Exception{
  5.                
  6.                         ServerSocket ss=new ServerSocket(12650);
  7.                         Socket s=ss.accept();
  8.                         
  9.                         BufferedReader br=
  10.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  11.                         BufferedWriter bw=
  12.                                 new BufferedWriter(new FileWriter("D:\\3.txt"));
  13.                         
  14.                         String len=null;
  15.                         while((len=br.readLine())!=null){//这里~~~~~为什么
  16. <font>br.readLine()</font><span style="background-color: rgb(255, 255, 255); ">为什么 </span><font>读不到NULL?</font>
  17.                                 System.out.print("我写");
  18.                                 bw.write(len);
  19.                                 bw.newLine();
  20.                                 bw.flush();
  21.                                 System.out.print("我写1");
  22.                         }
  23.                         System.out.print("3");
  24.                         PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
  25.                         System.out.print("4");
  26.                         pw.println("上传完毕");
  27.                         bw.close();
  28.                         br.close();

  29.         }

  30. }
复制代码
经过写我打印语句,我也知道是因为Re2类,在while((len=br.readLine())!=null)这个语句中还没有结束,才导致下面打印3语句没有执行,
也跟毕老师23天视频14,12分20秒左右讲的 2边都在等。
问题1:我知道要加结束标记给服务器端,但是我不懂Re2类,也就是服务器端 的 br.readLine()为什么 读不到NULL?

问题2:要加结束标记,为套接字.shutdownXXXStream方法,是不是最简洁方便公认最好的方法?

新问题3:为什么要加flush(),程序后面也有close方法,最终也要会刷新,但是不加flush却会出错,不解。求大侠那一部分的流程

1 个回复

倒序浏览
哎,看了24天01视频 终于知道为什么读不到null

根据老师讲的是客户端读的到-1,结束循环内的写入动作,但是写入动作并没有把-1写过过去给服务端。
服务端没有读到-1所以一直等待。

同理也能解释为什么读不到null
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马