有时候我们需要像Ajax那样,用户一输出就会在服务器返回输出的结果比如用户输出123,控制台上面就输出123,紧接着用户输出234,控制台上面就是234,当然,代码写起来并不困惑:

public class MyServer {   public static void main(String[] args) throws IOException{   ServerSocket server=new ServerSocket(6666);   Socket client=server.accept();   BufferedReader in=  new BufferedReader(new InputStreamReader(client.getInputStream()));   while(true){   String str=in.readLine();   System.out.println(str);   if(str.equals("end"))   break;   }   client.close();   }   }public class ClientSocket{   static Socket server;  public static void main(String[] args)throws Exception{   server=new Socket(InetAddress.getLocalHost(),6666);   PrintWriter out=new PrintWriter(server.getOutputStream());   BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));     while(true){   String str=wt.readLine();   out.println(str);   //这里一定要注意刷新流out.flush();   if(str.equals("end")){   break;   }   }   server.close();   }   }   

好了,开始运行,输入123,控制台马上返回123,然后继续输入456,发现控制台没有反应。再输,还是没有反应。有的同学会怀疑代码有错误,认为在while循环中System.out.println(str)这句话没有执行,然后头就大了。其实这段代码是完全没有错的,原因在于其实你运行了两个程序,在第二次运行的时候eclipse控制台是交给了服务端,所以你在控制台上的操作实际上是对服务端的操作,当然不会起作用。

如果要起作用,代码这样写:

public class MyServer {   public static void main(String[] args) throws IOException{   ServerSocket server=new ServerSocket(6666);   Socket client=server.accept();   BufferedReader in=  new BufferedReader(new InputStreamReader(client.getInputStream()));   PrintWriter out=new PrintWriter(client.getOutputStream());   while(true){   String str=in.readLine();   System.out.println(str);   out.println("has receive....");   out.flush(); if(str.equals("end"))   break;   }   client.close();   }   }public class ClientSocket{   static Socket server;   public static void main(String[] args)throws Exception{   server=new Socket(InetAddress.getLocalHost(),6666);   BufferedReader in=  new BufferedReader(new InputStreamReader(server.getInputStream()));   PrintWriter out=new PrintWriter(server.getOutputStream());   BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));     while(true){   String str=wt.readLine();   out.println(str);   out.flush();   if(str.equals("end")){   break;   }   System.out.println(in.readLine());   }   server.close();   }   } 

这样做的结果是控制台一直客户端手里,服务器返回数据到客户端的控制台。当输入一个字符后会立即显示。当输入end的时候,客户端被断开,服务器端获得控制台,所以你才会看见“所有的数据被一起显示了”。



更多相关文章

  1. 通过Android 客户端上传数据到服务器
  2. repo sync同步Android 源代码下载到99%出错
  3. 【Android Studio快捷键】之代码提示
  4. 使用calabash测试开源中国Android客户端
  5. Android的strings.xml不在代码显示转html原生就支持的部分html语

随机推荐

  1. android sp(strong pointer) 和 wp(weak
  2. 【Android】实现非root的 Traceroute --
  3. Handle详解和使用方法
  4. Android AlarmManager实现定时任务(也就是
  5. 《疯狂Android讲义》学习笔记一
  6. Android通过intent发送彩信
  7. Android 启动时 出现黑屏
  8. Android将camera获取到的YuvData在jni中
  9. android系统关机源码(9.0)流程分析
  10. Android WebView全面讲解