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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-7-15 23:38  /  1388 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高鑫 于 2012-7-15 23:39 编辑
  1. /*
  2. 客户端通过键盘录入姓名
  3. 服务端进行校验

  4. 如果用户存在,在服务端显示×××已登录
  5. 并在客户端显示***,欢迎光临

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

  8. 做多登录3次        
  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("192.168.1.3",10000);
  17.             BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  18.             PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  19.             BufferedReader bufIn=
  20.                     new BufferedReader(new InputStreamReader(s.getInputStream()));
  21.             for(int x=0;x<3;x++)
  22.             {
  23.                     String line=bufr.readLine();
  24.                     if(line==null)
  25.                             break;
  26.                     out.println(line);
  27.                     String info=bufIn.readLine();
  28.                     System.out.println("info:"+info);
  29.                     if(info.contains("欢迎"))
  30.                             break;
  31.                 }
  32.                 bufr.close();
  33.                 s.close();
  34.         }
  35. }
  36. class UserThread implements Runnable
  37. {
  38.         private Socket s;
  39.         UserThread(Socket  s)
  40.         {        
  41.                 this.s=s;
  42.         }
  43.         public void run()
  44.         {
  45.                 String ip=s.getInetAddress().getHostAddress();
  46.                 System.out.println(ip+".....connected");
  47.                 try
  48.                 {
  49.                         for(int x=0;x<3;x++)
  50.                         {
  51.                                 BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  52.                                 String name=bufIn.readLine();
  53.                                 BufferedReader bufr=new BufferedReader (new FileReader("File.txt"));
  54.                                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  55.                                 String line=null;
  56.                                 boolean flag=false;
  57.                                 while((line=bufr.readLine())!=null)
  58.                                 {
  59.                                         if(line.equals(name))
  60.                                         {
  61.                                                 flag=true;
  62.                                                 break;        
  63.                                         }
  64.                                                         
  65.                                 }
  66.                                 if(flag)
  67.                                         {
  68.                                                 System.out.println(name+"已登录");
  69.                                                 out.println(name+",欢迎光临");
  70.                                                 break;
  71.                                         }
  72.                                 else
  73.                                 {
  74.                                         System.out.println(name+"尝试登录");
  75.                                         out.println(name+",用户名不存在");        
  76.                                 }
  77.                         }        
  78.                 }
  79.                 catch(Exception e)
  80.                 {
  81.                         throw new RuntimeException("校验失败");        
  82.                 }
  83.         }
  84. }

  85. class LoginServer
  86. {
  87.         public static void main(String[] args) throws Exception
  88.         {        
  89.                 ServerSocket ss=new ServerSocket(10000);
  90.                 while(true)
  91.                 {
  92.                         Socket s=ss.accept();
  93.                         new Thread(new UserThread(s)).start();        
  94.                 }
  95.         }        
  96. }


复制代码
请问class UserThread类中创建的3个流对象为什么不放在for外面呢,我理解的是流对象写在for循环外面,每次就判断下输入进来的name就行了啊,我哪里理解错了

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

4 个回复

倒序浏览
????
回复 使用道具 举报
1. BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=bufIn.readLine();
你的输入流确定了,那么readLine()方法是不是读取的源固定了,那你判断一次之后,你的源没有更改,但是游标移动了,肯定读不到数据了,除非你一次打几行用户名
BufferedReader bufr=new BufferedReader (new FileReader("File.txt"));
while((line=bufr.readLine())!=null)
同样的,你在外面定义的,如果最后不成功,那么是不是再读就一直为空了?

PrintWriter out=new PrintWriter(s.getOutputStream(),true);
因此,每次请求都是通过socket重新获取流。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 高鑫 于 2012-7-16 21:30 编辑
张_涛 发表于 2012-7-16 20:26
1. BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=b ...

我弄明白了,只要把BufferedReader bufr=new BufferedReader (new FileReader("File.txt"));这一句放进for循环里就可以了,另外2个流可以不放在for循环了,我试验了下,应该是对的,朋友你在帮我看下对不对

回复 使用道具 举报
高鑫 发表于 2012-7-16 21:28
我弄明白了,只要把BufferedReader bufr=new BufferedReader (new FileReader("File.txt"));这一句放进for ...

嗯,确实。关键就是判断的流要每次重新读取,你验证就OK那应该就是没有问题了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马