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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© never615 中级黑马   /  2014-6-9 21:28  /  1189 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 never615 于 2014-6-9 23:20 编辑


在客户端和服务端都要判断是否为空,为啥两边都要判断啊,实际测试,只有一边都不行,可是想不通啊

比如在只在服务端判断是否为空,客户端直接Ctrl+C的话,还是会打印一次null尝试登陆;服务端判断空了怎么null还能进来还输出了?


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

  4. 如果该用户存在,在服务端显示xxx,已登陆。
  5. 并在客户端显示 xxx,欢迎光临。

  6. 如果该用户存在,在服务端显示xxx,尝试登陆。
  7. 并在客户端显示 xxx,该用户不存在。

  8. 最多就登录三次。
  9. */
  10. import java.io.*;
  11. import java.net.*;


  12. class  LoginClient
  13. {
  14.         public static void main(String[] args) throws Exception
  15.         {
  16.                 Socket s = new Socket("127.0.0.1",10008);

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

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

  20.                 BufferedReader bufIn =
  21.                         new BufferedReader(new InputStreamReader(s.getInputStream()));


  22.                 for(int x=0; x<3; x++)
  23.                 {
  24.                         String line = bufr.readLine();
  25.                         if(line==null)
  26.                                 break;
  27.                         out.println(line);

  28.                         String info = bufIn.readLine();
  29.                         System.out.println("info:"+info);
  30.                         if(info.contains("欢迎"))
  31.                                 break;

  32.                 }

  33.                 bufr.close();
  34.                 s.close();
  35.         }
  36. }


  37. class UserThread implements Runnable
  38. {
  39.         private Socket s;
  40.         UserThread(Socket s)
  41.         {
  42.                 this.s = s;
  43.         }
  44.         public void run()
  45.         {
  46.                 String ip = s.getInetAddress().getHostAddress();
  47.                 System.out.println(ip+"....connected");
  48.                 try
  49.                 {
  50.                         for(int x=0; x<3; x++)
  51.                         {
  52.                                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

  53.                                 String name = bufIn.readLine();
  54.                                 if(name==null)
  55.                                         break;

  56.                                 BufferedReader bufr = new BufferedReader(new FileReader("name.txt"));

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

  58.                                 String line = null;

  59.                                 boolean flag = false;
  60.                                 while((line=bufr.readLine())!=null)
  61.                                 {
  62.                                         if(line.equals(name))
  63.                                         {
  64.                                                 flag = true;
  65.                                                 break;
  66.                                         }                                
  67.                                 }
  68.                                 
  69.                                 if(flag)
  70.                                 {
  71.                                         System.out.println(name+",已登录");
  72.                                         out.println(name+",欢迎光临");
  73.                                         break;
  74.                                 }
  75.                                 else
  76.                                 {
  77.                                         System.out.println(name+",尝试登录");
  78.                                         out.println(name+",用户名不存在");
  79.                                 }


  80.                         }
  81.                         s.close();
  82.                 }
  83.                 catch (Exception e)
  84.                 {
  85.                         throw new RuntimeException(ip+"校验失败");
  86.                 }
  87.         }
  88. }
  89. class  LoginServer
  90. {
  91.         public static void main(String[] args) throws Exception
  92.         {
  93.                 ServerSocket ss = new ServerSocket(10008);

  94.                 while(true)
  95.                 {
  96.                         Socket s = ss.accept();

  97.                         new Thread(new UserThread(s)).start();
  98.                 }
  99.         }
  100. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
我把客户端的判断去掉了,在服务器端加了一行代码,
  1. String name = bufIn.readLine();
  2.                                 System.out.println(name.equals("null"));//加的这句,输出结果为true
  3.                                 if(name==null)
  4.                                         break;
复制代码

事实证明,老毕的服务器端判断无效,我在这部分后面加了一个打印语句,执行了,将判断改成name.equals("null")这样就可以只在服务器端做判断。。。可以肯定的是,readLine从网络流中获取的结果转换成了字符串,

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报
月光海 发表于 2014-6-9 22:38
我把客户端的判断去掉了,在服务器端加了一行代码,
事实证明,老毕的服务器端判断无效,我在这部分后面加 ...

明白了 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马