TCP-客户端多线程并发登陆服务端

    xiaoxiao2026-04-16  2

    /*TCP-客户端多线程并发登陆服务端 客户端通过键盘录入用户名。 服务端对这个用户名进行校验. 如果该用户存在,在服务端显示xxx,已登陆 并在客户端显示xxx,欢迎光临. 如果该用户不存在,在服务端显示xxx,尝试登陆. 并在客户端显示xxx,该用户不存在. 最多就登录三次. */ class UserLogin { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.1.254",10008); BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//键盘 PrintWriter out = new PrintWriter(s.getOutputStream().true);//s输出,自动刷新 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//s输入 for (int x = 0;x<3 ;x++ )//最多就登录三次 { String line = bufr.readLine();//键盘到line if (line==null) break; out.println(line);//line到out到s输出 String info = bufIn.readLine(); System.out.println("info:"info); if (info.contains("欢迎"))//info包含"欢迎",表示用户存在于用户列表中 break; } bufr.close(); s.close(); } } class UserThread implements Runnable//用户线程 { private Socket s;//客户端s要定义为成员 UserThread(Socket s)//做构造器,客户端s放进参数 { this.s = s; } public void run()//run()方法,用start()开启线程 { String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); try { for (int x = 0;x<3 ;x++ ) { BufferedReader bufIn = new BufferedReader(new InputStream(s.getInputStream()));//拿到客户端s输入的用户名 String name = bufIn.readLine); if (name==null) break; BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));//从指定文件中读取用户列表,来比较 PrintWriter out = new PrintWriter(s.getOutputStream(),true);//s输出流,自动刷新 String line = null; boolean flag = false; while ((line = bufr.readLine())!=null)//缓冲流读到文件结尾 { if (line.equals(name))//找到文件中匹配的用户名 { flag = true; break; } } if (flag) { System.out.println(name+",已登录"); out.println(name+",欢迎光临"); break; } else { System.out.println(name+".尝试登陆"); out.println(name+"用户名不存在"); } } s.close() } catch (Exception e) { throw new RuntimeException(ip+"校验失败"); } } } class UserServer { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10008); while (true)//多线程,循环要一直开启,用true { Socket s = ss.accept();//拿 客户端s new Thread(new UserThread(s)).start();//start()开线程,客户端s当做用户线程UserThread()的构造参数扔进来 } } }
    转载请注明原文地址: https://ju.6miu.com/read-1308894.html
    最新回复(0)