黑马程序员技术交流社区

标题: 用户直接回车 String name=bur.readLine()读到了什么 [打印本页]

作者: 刘圣繁    时间: 2013-2-23 22:08
标题: 用户直接回车 String name=bur.readLine()读到了什么
import java.net.*;
import java.io.*;
import java.lang.Thread;
class LoginClient
{
public static void main(String[]args)throws Exception
{
      Socket  st=new Socket("192.168.0.2",10002);
      BufferedReader bur=null;
      try{
          PrintWriter out=new PrintWriter(st.getOutputStream(),true);
          bur=new BufferedReader(new InputStreamReader(System.in));
          BufferedReader buw=new BufferedReader(new InputStreamReader(st.getInputStream()));
            for(int i=0;i<3;i++)
              {
                 String name=bur.readLine();
     if(name==null)// 如果用户直接输入回车的话  name应该为空吧然后continue  继续等待用户输入但是实验证明它不为空而且传到了服务端  但是服务端打印name又什么都  没有
     {
     System.out.println("请输入用户名");
     continue;
     }
     out.println(name);
     String line=buw.readLine();
     System.out.println(line);
     if(line.contains("欢迎"))
     break;
     }
  }
catch(IOException e){e.printStackTrace();}
finally{
try{
bur.close();
st.close();
}
catch(IOException e){e.printStackTrace();}
}
}
}
class ThreadLogin implements Runnable
{
    private Socket st=null;
ThreadLogin(Socket st)
{
this.st=st;
}
public void run()
{
   String ip=st.getInetAddress().getHostAddress();
   BufferedReader bur=null;
   System.out.println(ip+"--------------请求连接服务器");
   try{
       //bur=new BufferedReader(new FileReader("user.txt"));
    PrintWriter out=new PrintWriter(st.getOutputStream(),true);
    BufferedReader burr=new BufferedReader(new InputStreamReader(st.getInputStream()));
    boolean flag=false;
    String userName=null;
   // String name=null;
       for(int i=0;i<3;i++)
    {
   
      String name=burr.readLine();
    if(name==null)
    break;
    bur=new BufferedReader(new FileReader("user.txt"));
    while((userName=bur.readLine())!=null)
    {
       if(userName.equals(name))
       {
          flag=true;
       break;
       }
    }
    if(!flag)
    {
      System.out.println("注意注意"+name+"正在尝试登陆!");
      out.println("用户名错误,请重新登录");
      bur.close();
    }
    else
    {
       out.println("欢迎"+userName+"登录");
       System.out.println(userName+"已经成功登录");
       break;
    }
   }
  }
  catch(IOException e){ e.printStackTrace();}
  finally{
     try
     {
       st.close();
    bur.close();
     }
     catch(IOException e){e.printStackTrace();}
     }
}
}
class LoginServer
{
public static void main(String[]args)
{
    try{
    ServerSocket st=new ServerSocket(10002);
    while(true)
      {
       Socket ss=st.accept();
    new Thread(new ThreadLogin(ss)).start();
  }
  }
  catch(IOException e){e.printStackTrace();}
  }
}
这个程序有个bug如下代码
if(name==null)// 如果用户直接输入回车的话  name应该为空吧然后continue  继续等待用户输入但是实验证明它不为空而且传到了服务端  但是服务端打印name又什么都  没有
     {
     System.out.println("请输入用户名");
     continue;
     }


作者: 张世钦    时间: 2013-2-23 22:13
直接回车的话应该还是有输入内容的吧     \r\n    也就是回车符
作者: 罗海云    时间: 2013-2-23 22:20
回车也代表字符.. .. "\r\n"
作者: 游灿平    时间: 2013-2-24 01:15
readLine()
    读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
    包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null




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