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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

客户端通过键盘录入用户名,服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆;并在客户端显示xxx,欢迎光临。
如果用户不存在,在服务端显示xxx,尝试登陆;并在客户端显示xxx,该用户不存在。
最多就登录三次。
  1. import java.io.*;
  2. import java.net.*;

  3. //客户端
  4. class LoginClient
  5. {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 //创建服务
  9.                 Socket s = new Socket("localhost",10008);
  10.                 //键盘录入
  11.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  12.                
  13.                 //用socket服务输出流写入数据
  14.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  15.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

  16.                 for(int x=0;x<3;x++)
  17.                 {
  18.                         String line = bufr.readLine();//读取键盘录入
  19.                         if(line==null)
  20.                                 break;
  21.                         out.println(line);

  22.                         String info = bufIn.readLine();//将数据写入流中
  23.                         System.out.println("info:"+info);
  24.                         if(info.contains("欢迎"))
  25.                                 break;
  26.                 }
  27.                 bufr.close();
  28.                 s.close();
  29.         }
  30. }

  31. //服务端
  32. class LoginServer
  33. {
  34.         public static void main(String[] args) throws Exception
  35.         {        //创建服务,监听端口
  36.                 ServerSocket ss = new ServerSocket(10008);

  37.                 while(true)
  38.                 {
  39.                         //获取客户端对象
  40.                         Socket s = ss.accept();
  41.                         //客户端执行线程
  42.                         new Thread(new UserThread(s)).start();
  43.                 }
  44.         }
  45. }
  46. //用多线程实现并发登录
  47. class UserThread implements Runnable
  48. {
  49.         private Socket s;
  50.         UserThread(Socket s)
  51.         {
  52.                 this.s = s;
  53.         }
  54.         public void run()
  55.         {        //获取客户端ip
  56.                 String ip = s.getInetAddress().getHostAddress();
  57.                 System.out.println(ip+"...connected");
  58.                 try
  59.                 {
  60.                         for(int x=0;x<3;x++)
  61.                         {
  62.                                 //通过客户端读取流读取数据
  63.                                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  64.                                 String name = bufIn.readLine();//读取客户端数据
  65.                                 if(name==null)//如果客户端没有发送数据,则跳出循环
  66.                                         break;
  67.                                 //读取user.txt中的数据
  68.                                 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
  69.                                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);

  70.                                 String line = null;
  71.                                 boolean flag = false;//设置标记
  72.                                 //读取用户数据
  73.                                 while((line=bufr.readLine())!=null)
  74.                                 {
  75.                                         if(line.equals(name))
  76.                                         {
  77.                                                 flag = true;//如果用户名存在,将标记设为true
  78.                                                 break;
  79.                                         }
  80.                                 }
  81.                                 if(flag)
  82.                                 {
  83.                                         System.out.println(name+",已登录");
  84.                                         out.println(name+",欢迎光临");
  85.                                         break;
  86.                                        
  87.                                 }
  88.                                 else
  89.                                 {
  90.                                         System.out.println(name+",尝试登录");
  91.                                         out.println(name+"用户名不存在");
  92.                                 }
  93.                         }
  94.                         s.close();
  95.                 }
  96.                 catch (Exception e)
  97.                 {
  98.                         throw new RuntimeException(ip+"校验失败");
  99.                 }
  100.         }
  101. }
复制代码




2 个回复

倒序浏览
学习了   我觉得用户名和密码当成键值对  用Properties集合来存储 更方便查询和存储
Properties可以跟IO结合使用 挺方便
回复 使用道具 举报
学到了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马