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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-10-16 16:04  /  1144 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


我先启动了服务端,然后服务端刚启动,还未等键盘录入,就执行完毕,抛出throw new RuntimeException(ip+"检验失败");

readLine( ) 应该是阻塞,服务端要等到客户端键盘录入数据并传入到服务端,才能继续向下执行,为什么这里直接结束了呢?找了半天,不知道哪里
出了问题,请大侠帮忙看看,谢谢了
  1. package cn.it.xushuai.netProgram;

  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. import java.net.UnknownHostException;


  10. class LoginClient{
  11.        
  12.         public static void main(String[] args) throws UnknownHostException, IOException{
  13.                
  14.                 System.out.println("Client...........run");
  15.                
  16.                 Socket s  = new Socket("127.0.0.1",10012);
  17.                
  18.                 //需要明确3个流:键盘录入,读取服务端,写入服务端
  19.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  20.                
  21.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);        //向服务端传送数据
  22.                
  23.                 BufferedReader bufrIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//获取服务端反馈的信息
  24.                
  25.                 for(int i=0;i<3;i++){        //向服务端提交数据,最多3次机会
  26.                        
  27.                         String line = bufr.readLine();        //从键盘读取数据
  28.                         if(line==null)
  29.                                 break;
  30.                        
  31.                         out.println(line);        //向服务端传送键盘录入的数据
  32.                        
  33.                         String info = bufrIn.readLine();                //读取服务端返回的信息,并做判断               
  34.                         System.out.println("info"+info);       
  35.                         if(info.contains("欢迎"))        //如果 登陆成功, 跳出循环
  36.                                 break;
  37.                 }
  38.                 bufr.close();
  39.                 s.close();
  40.                
  41.         }
  42. }

  43. class UserThread implements Runnable{

  44.         private Socket s ;
  45.         UserThread(Socket s ){
  46.                
  47.                 this.s = s ;
  48.         }
  49.        
  50.         @Override
  51.         public void run() {
  52.                 // TODO Auto-generated method stub
  53.                
  54.                         //明确3个流:接收客户端、输出、 以及读取数据库
  55.                        
  56.                         String ip = s.getInetAddress().getHostAddress();
  57.                
  58.                         System.out.println("userThread........run");
  59.                         System.out.println(ip+"........connected");
  60.                
  61.                 try {

  62.                         for(int i=0;i<3;i++){
  63.                                
  64.                                 BufferedReader bufrIn =
  65.                                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  66.                                
  67.                                 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
  68.                                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  69.                                
  70.                                 String userName = bufrIn.readLine();        //读取客户端发送的数据

  71.                                         String line = null;
  72.                                        
  73.                                         boolean flag = false;
  74.                                         while((line = bufr.readLine())!=null){
  75.                                                
  76.                                                 if(line.equals(userName)){               
  77.                                                         flag = true;
  78.                                                         break;
  79.                                                         }
  80.                                                
  81.                                                 }
  82.                                        
  83.                                         if(flag){
  84.                                                 System.out.println(userName+",已登陆");
  85.                                                 out.println(userName+"登陆成功,欢迎您!");                        //向客户端反馈数据
  86.                                                 break;
  87.                                         }
  88.                                         else{
  89.                                                
  90.                                                 System.out.println(userName+",尝试登陆");
  91.                                                 out.println(userName+",用户名不存在");
  92.                                         }                               
  93.                                 }
  94.                                 s.close();               
  95.                                 } catch (IOException e) {
  96.                                         throw new RuntimeException(ip+"检验失败");
  97.                                 }
  98.                        
  99.         }}

  100. class  LoginServer
  101. {
  102.         public static void main(String[] args) throws Exception
  103.         {
  104.                 System.out.println("server run..........");
  105.                 ServerSocket ss = new ServerSocket(10012);

  106.                 while(true)
  107.                 {
  108.                         Socket s = ss.accept();

  109.                         new Thread(new UserThread(s)).start();
  110.                 }
  111.         }
  112. }
复制代码
user.txt :
zhangsan
lisi
wangwu

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马