黑马程序员技术交流社区

标题: 客户端每第二次输入用户名,就会报异常,求解! [打印本页]

作者: Adualtbird    时间: 2015-9-9 21:14
标题: 客户端每第二次输入用户名,就会报异常,求解!
/*
需求:
在客户端,输入用户名,如果该用户名在系统数据库存在,则提示欢迎登陆,如果不存在,则提示用户不存在,每个IP限制登陆三次
*/
import java.io.*;
import java.net.*;
class LoginClient
{
        public static void main(String[] args)throws Exception
        {
                Socket s=new Socket("192.168.100.100",10001);
                String line=null;
                String info=null;
                        //创建客户端源为控制台的读入流
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                        //创建打印流,将控制台读入的数据打印到网络输出流
                PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                        //创建带缓冲器的网络输入流,用来读取服务端反馈的数据
                BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
                while(true){
                        line=br.readLine();
               
                        if(line==null)
                                break;
                        if("over".equals(line))
                                break;
                        pw.println(line);
                        //将服务器端反馈的信息输出在控制台上
                        info=bufin.readLine();
                        System.out.println(info);
                        if(info.contains("欢迎"))
                                break;
                       
                       
                        //br.close();

                }
                s.close();
       
        }
}
class LoginServer
{
        public static void main(String[] args)throws Exception
        {
                //创建服务器端Socket服务
                ServerSocket ss=new ServerSocket(10001);
                while(true){
                        //当服务器端接收到一个客户端对象时,则开启一个子线程,处理客户端请求
                        Socket s=ss.accept();
                        new Thread(new LoginUser(s)).start();
                }
        }
}
class LoginUser implements Runnable
{
        private Socket s;
        LoginUser(Socket s){
                this.s=s;
        }
        public void run(){
                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip+":connected");
                try{
                        for(int x=0;x<3;x++){
                                //创建服务端读取流缓冲器,关联网络输入流,来读取客户端输入的数据
                                BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

                               
                                //创建服务器端读取流缓冲器,关联文件读取流,来读取指定文件数据
                                BufferedReader br=new BufferedReader(new FileReader("D:\\Mysql.txt"));
                                //创建打印流,关联客户端网络输出流,来将反馈信息打印到网络输出流传递给客户端
                                PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                                String name=brIn.readLine();

                                String line=null;
                                //添加标记
                                boolean flag=false;
                                //判断客户端输入的用户名称,在服务器端数据库是否存在
                                while((line=br.readLine())!=null){
                                        if(name.equals(line)){
                                                flag=true;
                                                break;
                                        }
                                }
                                if(flag==true){
                                        System.out.println(name+"已登陆");
                                        pw.println(name+":欢迎登陆");
                                        break;
                                }
                                else{
                                        System.out.println(name+":尝试登陆");
                                        pw.println(name+"用户不存在");
                                        break;
                                }
                       
                        }
                        s.close();
                }
                catch(Exception e){
                        throw new RuntimeException("用户校验失败");
                }
        }
}
服务器端主线程进来后就一直处于等待状态了,而客户端,我把while循环放在开始读控制台输入的地方,依然是不行,按理说如果客户端输入的用户名不符,客户端应该是可以再次输入的,因为客户端线程还没有断开,会去重复等待读控制台输入的内容,直到达到3次,才会被服务器端关闭socket,可是我运行第二次就抛异常了,很不解!




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