黑马程序员技术交流社区

标题: Tcp客户服务端的问题。 [打印本页]

作者: 谭荣强    时间: 2014-4-2 17:16
标题: Tcp客户服务端的问题。
折腾了好几个小时了,现在的问题是第一次输入的名字失败时,键盘录入等待了,不让在输入了。帮忙看看什么情况,先谢啦。

客户端通过键盘录入用户名,服务端对这个名字进行校验。
如果该用户存在,在服务端显示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();
        }
}
作者: osully    时间: 2014-4-2 20:03
给你个临时解决方案

   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;
                        }
作者: 谭荣强    时间: 2014-4-2 21:09
osully 发表于 2014-4-2 20:03
给你个临时解决方案

    q: for (int x=0;x

我试试看




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