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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-4-2 17:16  /  759 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

折腾了好几个小时了,现在的问题是第一次输入的名字失败时,键盘录入等待了,不让在输入了。帮忙看看什么情况,先谢啦。

客户端通过键盘录入用户名,服务端对这个名字进行校验。
如果该用户存在,在服务端显示xxx,已登陆,并在客户端显示xxx 欢迎登陆。
如果该客户不存在,在服务端显示xx,尝试登录。并在客户端显示xxx,该用户不存在。
最多登陆3次。
import java.io.*;
import java.net.*;
class  login1Client
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket("192.168.0.145",10014);
                BufferedReader bufr=null;
                 for (int x=0;x<3 ;x++ )
                 {               
                 //键盘录入3次。
                         bufr = new BufferedReader(new InputStreamReader(System.in));
                        String line = bufr.readLine();
                        //将名字写入网络流
                        PrintWriter out = new PrintWriter(s.getOutputStream(),true);                         
                        out.println(line);
                        //获取服务端返回的信息
                        /*
                        BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        String info =bufin.readLine();
                        System.out.println("info"+info);
                        */               
                        InputStream is = s.getInputStream();
                        byte[] buf = new byte[1024*1024];
                        int len =0;
                        String str=null;
                        while ((len=is.read(buf))!=-1)
                        {
                                str = new String(buf,0,len);
                                System.out.println(str);                                 
                        }
                        if (str.contains("成功"))
                        {
                                break;
                        }
                 }
                //关闭资源       
                  bufr.close();
                s.close();       
        }
}

class login1Thread implements Runnable
{
        private Socket s;
        public login1Thread(Socket s)
        {
                this.s=s;
        }
        public void run()
        {               
                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip+"....连接上");
                try
                {                               
                        for (int x=0;x<3 ;x++ )//同一个ip地址只能读取三次
                        {
                                //读取网络流数据(名字)
                                BufferedReader is = new BufferedReader(new InputStreamReader(s.getInputStream()));                                 
                                String name = is.readLine();
                                System.out.println(name);
                                //读取本地用户信息库
                                File fi = new File("1.txt");
                                FileReader fis = new FileReader(fi);
                                BufferedReader bf = new BufferedReader(fis);                               
                                String line = null;
                                boolean flag= false;                 
                                while ((line=bf.readLine())!=null)
                                {                                 
                                        if (name.equals(line))
                                        {
                                                flag = true;
                                                break;
                                        }                                          
                                }
                                //将反馈信息写入网络流
                                PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
                                if (flag)
                                {
                                        pw.println(name+"登陆成功");
                                        System.out.println(ip+"已登录");
                                        break;
                                }
                                else
                                {
                                        pw.println(name+"登陆失败");
                                        System.out.println(ip+"尝试登录");
                                }
                        }
                        //关闭资源
                        s.close();       
                }
                catch (Exception e)
                {
                        throw new RuntimeException("...");
                }
        }

}

class login1Server
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10014);
                Socket s = ss.accept();
                new Thread(new login1Thread(s)).start();
        }
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

2 个回复

正序浏览
osully 发表于 2014-4-2 20:03
给你个临时解决方案

    q: for (int x=0;x

我试试看
回复 使用道具 举报
给你个临时解决方案

   q: for (int x=0;x<3 ;x++ )



while ((len=is.read(buf))!=-1)
{
     str = new String(buf,0,len);
    System.out.println(str);  
continue q;
                        }
                        if (str.contains("成功"))
                        {
                                break;
                        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马