黑马程序员技术交流社区

标题: 实现TCP数据传输 [打印本页]

作者: 庄承荣    时间: 2011-11-7 00:09
标题: 实现TCP数据传输
请大家帮忙看一下下面的程序哪里有问题,可以输出“debug 1 ...” ,但无法输出"debug 2 ..." , ip 地址没错
  1. class TcpClient2{
  2.         public static void main(String[] args) throws Exception{
  3.                 System.out.println("clint start...");
  4.                 Socket s = new Socket("192.168.1.2",10005);
  5.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  6.                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  7.                 String sendDataStr=null;
  8.                 while((sendDataStr=br.readLine())!=null){
  9.                         if(sendDataStr.equals("bye")){
  10.                                 break;
  11.                         }
  12.                         bw.write(sendDataStr);
  13.                         bw.flush();
  14.                 }
  15.                 bw.close();
  16.         }
  17. }

  18. class TcpServer2{
  19.         public static void main(String[] args) throws Exception{
  20.                 System.out.println("server start...");
  21.                 ServerSocket ss = new ServerSocket(10005);
  22.                 Socket s = ss.accept();
  23.                 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  24.                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  25.                 String receiveDataStr=null;
  26.                 System.out.println("debug 1 ...");
  27.                 while((receiveDataStr=br.readLine())!=null){
  28.                         System.out.println("debug 2 ...");
  29.                         if(receiveDataStr.equals("bye")){
  30.                                 break;
  31.                         }
  32.                         System.out.println("receive data:"+receiveDataStr);
  33.                 }
  34.                 s.close();
  35.                 ss.close();
  36.         }
  37. }
复制代码

作者: 柴亚飞    时间: 2011-11-7 03:36
当你启动服务端程序时,客户端没有数据传输。这时br.readLine()方法是读不到任何数据的。这时赋值语句receiveDataStr=br.readLine()的值依然是null。判断条件为false。这时程序不会进入循环体内部。所以服务端程序直接运行到最后,直接退出了。

你写的程序有问题。


作者: 周敏2011nc    时间: 2011-11-7 08:48
你在Server端使用的是读一行的方法,该方法必需读到“\r\n”的结束标记才会结束,TcpClient端的writer(String str)方法,并没有发送结束标记,所以Server端会一直等待在receiveDataStr=br.readLine()处。
解决办法 : 在TcpClient端的bw.write(sendDataStr) 后加bw.newLine()方法。
作者: 庄承荣    时间: 2011-11-7 21:19
谢谢各位了,问题已经解决{:soso_e100:}




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