黑马程序员技术交流社区

标题: 菜鸟问题:大家给看一下代码错在哪里了? [打印本页]

作者: 黄晓天    时间: 2011-11-1 08:32
标题: 菜鸟问题:大家给看一下代码错在哪里了?
大家给看一下,代码错在哪里了?user.txt文件里的内容是:yellowxiaotian
                                                                                             yuanfengmei
为什么我的客户端只能输入一次,第一次输入错的用户名,第二次再输入错的用户名或着正确的用户名,就会抛出这个异常






/*
客户端通过键盘录入用户名。
服务端对这个用户名进行校验

如果该用户存在,在服务器上显示xxx,已登录
并在客户端显示xxx,欢迎光临

如果该用户不存在,在服务器端显示xxx,尝试登录。
并在客户端显示xxx,该用户不存在。
最多尝试登录三次。
*/
import java.net.*;
import java.io.*;

class  LoginClient  
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket("127.0.0.1",10006);

        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

                PrintWriter out = new PrintWriter(s.getOutputStream(),true);

                BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
                for(int x=0; x<3; x++)
                {
                        String line = bufr.readLine();
                        if(line==null)
                                break;
                        out.println(line);
                        System.out.println(line);

                        String info =bufIn.readLine();
                        System.out.println("info:"+info);
                        if(info.contains("欢迎"))
                break;
                }
                bufr.close();
                s.close();
                 
        }
}
class  LoginServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10006);
                while(true)
                {
                        Socket s = ss.accept();
                       
                        new Thread(new UserThread(s)).start();
                }
                 
        }
}

class  UserThread implements Runnable
{
        private Socket s;
        UserThread(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 bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
                                String name = bufIn.readLine();
                                if(name==null)
                                        break;

                                BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
                                PrintWriter out = new PrintWriter(s.getOutputStream(),true);
                                String line = null;
                                boolean flag = false;
                                while((line=bufr.readLine())!=null)
                                {
                                        if(line.equals(name))
                                        {
                                                flag = true;
                                                break;
                                        }
                                       
                                 
                                }
                                if(flag)
                                        {
                                                System.out.println(name+",已登录");
                                                out.println(name+",欢迎光临");
                                                break;
                                        }
                                        else
                                        {
                                                System.out.println(name+",尝试登录");
                                                out.println(name+",该用户不存在");
                                        }
                                s.close();
                        }
         }
         catch (Exception e)
         {
                         new RuntimeException(e.toString());
         }
        }
       
         
}


该贴已经同步到 黄晓天的微博
作者: 郭敏    时间: 2011-11-1 10:28
UserThread 类中,对流的关闭,s.close() 不应该放在For循环语句中,该循环执行完第一次,就把客户端关闭了,所以抛出了该异常。
作者: 黄晓天    时间: 2011-11-1 10:38
谢谢了,自己很粗心呢




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