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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓飞飞 中级黑马   /  2012-4-27 10:58  /  1933 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
客户端并发登陆
客户通过键盘录入用户名,服务端对这个用户名进行校验。
如果用户名存在,在服务端显示xxxy已登录,并在客户端显示xxx,欢迎光临
如果该用户不存在,在服务端显示,xxx,尝试登陆。并在客户端显示xxx,该用户不存在。
最多登陆三次
*/
import java.io.*;
import java.net.*;
class  LoginClient
{
public static void main(String[] args) throws Exception
{
  //定义客户端
  Socket s= new Socket("192.168.0.3",10000);
  //获取键盘读取流
  BufferedReader bufr=
   new BufferedReader(new InputStreamReader(System.in));
  //获取Socket输出流
  PrintWriter out= new PrintWriter(s.getOutputStream(),true);
  //获取Socket输入流
  BufferedReader bufIn=
   new BufferedReader(new InputStreamReader(s.getInputStream()));
  //判断用户登陆的次数 最多3次
  for (int x=0;x<3;x++ )
  {
   //读取键盘录入,
   String line = bufr.readLine();
   //如果客户端发的数据为空,则退出
  if (line==null)//这句话判断的是客户端的输入是否为空,然而当我在客户端什么都不输入,直接按回车时,怎么客户端还是把数据发给了服务端呢????而不是直接退出呢?
   {
    break;
   }
   //发给服务端
   out.println(line);
   //获取服务端反馈的信息
   String info = bufIn.readLine();
   System.out.println(info);
   //如果登陆成功,则不再循环判断
   if (info.contains("欢迎光临"))
    break;
  }
  bufr.close();
  s.close();
}
}
//定义客户端并发执行的线程
class UserThread implements Runnable
{
private Socket s;
UserThread(Socket s)
{
  this.s=s;
}
public void run()
{
//获取客户端的ip
String ip =s.getInetAddress().getHostAddress();
System.out.println(ip);
try
{
  //服务端循环判断登陆次数 最多3次
  for (int x=0;x<3 ;x++ )
  {
   //定义文件读取流
   BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
   //获取Socket读取流
   BufferedReader bufIn =
    new BufferedReader(new InputStreamReader(s.getInputStream()));
   //获取Socket输出流
   PrintWriter out = new PrintWriter(s.getOutputStream(),true);
   //读取用户输入的数据
   String line = bufIn.readLine();
   if (line==null)
   {
    break;
   }
   String name = null;
   boolean flag = false;
   //循环读取文件中的数据和用户输入的数据比较
   while ((name=bufr.readLine())!=null)
   {
    if (name.equals(line))
    {
     flag =true ;
     break;
    }
   }
   if(flag)
   {
    out.println(name+",欢迎光临");
    System.out.println(name+",已登录");
    break;
   }
   else
   {
    System.out.println(line+",尝试登陆");
    out.println(line+",不存在");
   }
  }
  s.close();//注意:读取流不能关
}
catch (Exception e)
{
  throw new RuntimeException("校验失败");
}
}
}
class  LoginServer
{
public static void main(String[] args) throws Exception
{
  //建立服务端服务
  ServerSocket ss = new ServerSocket(10000);
  //循环判断是否有服务连接
  while(true)
  {
   //获取客户端对象
   Socket s =ss.accept();
   //开启为客户端服务的线程
   new Thread(new UserThread(s)).start();
  }
}
}

1 个回复

倒序浏览
因为你回车 line 并不是等于 null 应该再加上|| line.equals("") 就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马