多client并发登录
//LoginClient.java
package mySocket; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; /**
*client通过键盘录入username
*服务端对这个username进行校验。
*
*假设该用户存在,在服务端显示xxx,已登录。
*并在client显示xxx,欢迎光临。 *
*假设该用户存在,在服务端显示xxx。尝试登陆。
*并在client显示xxx,该用户不存在。
*
*最多登陆3次。
*/
public class LoginClient { public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.1.103",10008); BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(s.getOutputStream(),true); BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream())); 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(); } }
//LoginServer.java
package mySocket; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket; class LoginThread implements Runnable {
private Socket s;
public LoginThread(Socket s) {
this.s = s;
}
public void run() {
//获取连接的ip
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"已被连接"); try {
for(int x=0;x<3;x++) {
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//读取client发来的数据
String name = bufIn.readLine();
if(name==null)
break;
//读取user.txt里的数据
BufferedReader bufr =
new BufferedReader(new FileReader("user.txt")); String line = null;
boolean flag = false; while((line=bufr.readLine())!=null) {
if(line.equals(name)) {
flag = true;
break;
}
} PrintStream out = new PrintStream(s.getOutputStream(),true);
if(flag) {
System.out.println(name+"已登录");
out.println(name+"欢迎光临");
break;
}
else{
System.out.println(name+"尝试登陆");
out.println(name+"username不存在");
} s.close();
}
} catch (Exception e) {
throw new RuntimeException(ip+"校验失败");
}
}
} public class LoginServer { public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10008); while(true) {
Socket s = ss.accept();
new Thread(new LoginThread(s)).start();
}
} }
//学习自毕向东老师培训视频
多client并发登录的更多相关文章
- Windows登录脚本可以限制并发登录吗
在Windows服务器中,使用一个Windows登录脚本来限制并发会话靠谱吗? 事实上,这种解决方案存在很多缺点和弱点,并不能满足大中型IT基础设施的安全性需求. 一.使用登陆脚本限制并发会话,恶意用 ...
- JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录
JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...
- 2017.6.30 用shiro实现并发登录人数控制(实际项目中的实现)
之前的学习总结:http://www.cnblogs.com/lyh421/p/6698871.html 1.kickout功能描述 如果将配置文件中的kickout设置为true,则在另处再次登录时 ...
- 2017.4.12 开涛shiro教程-第十八章-并发登录人数控制
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十八章-并发登录人数控制 shiro中没有提 ...
- 第十八章 并发登录人数控制——《跟我学Shiro》
目录贴:跟我学Shiro目录贴 在某些项目中可能会遇到如每个账户同时只能有一个人登录或几个人同时登录,如果同时有多人登录:要么不让后者登录:要么踢出前者登录(强制退出).比如spring securi ...
- LoadRunner 多用户并发 登录,上传数据,登出的脚本教程
这里记录 Web/Http 模式,模拟多用户并发进行 : 登录,上传数据,退出登录一整套流程.并发的用户量多少,可自定义.这里不介绍录屏的方式,是自己写脚本去执行的. 1.安装loadRunner ...
- jmeter_用户并发登录
部分摘自:https://blog.csdn.net/weixin_41291554/article/details/80492276 第一种方案:对登录账号和密码进行参数化 1.添加设置线程数: N ...
- Windows Azure Mobiles Services实现client的登录注冊
下文仅仅是简单实现,client以Android端的实现为例: 用户表Account: package com.microsoft.ecodrive.model; public class Accou ...
- 如何使用jmeter进行并发登录测试
第一种方案直接从数据库中获取账号和密码 1.设置线程数为20 ,我们的并发用户量就是20个用户同时登录 2.添加定时器 3.设置集合点,当用户数量达到20个的时候再同时请求进行登录操作 4.添加配置元 ...
随机推荐
- js禁止某个页面的回退
;!function(pkg, undefined){ var STATE = 'x-back'; var element; var onPopState = function(event){ eve ...
- [细节版]Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程
参考网址:https://lnmp.org/faq/letsencrypt-wildcard-ssl.html 使用的dns服务商:阿里云 , 更多服务商地址可见参考网址. 遇见的问题一. [Sat ...
- ES6 学习3 函数
1.函数默认参数 在ES5我们给函数定义参数默认值是怎么样? function action(num) { num = num || 200 //当传入num时,num为传入的值 //当没传入参数时, ...
- Linux一些简单命令
1.安装gvim:sudo apt-get install vim-gtk vim和gvim相同,只是后者比前者多了一个界面,此界面可以用来保存.新建.查找等. 三种模式,insert(i),norm ...
- 数组中出现一次的两个数(三个数)& 求最后一位bit为1
对于两个数,对于结果中,剩余bit1来异或区分. 下面的解法,非常精简: int lastBitOf1(int number) { ); } void getTwoUnique(vector<i ...
- Raw-OS源代码分析之任务删除与总结
分析的内核版本号截止到2014-04-15,基于1.05正式版,blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现"???"字样,则是未深究理解部分. Raw-OS官方 ...
- 4、python序列对比
1.列表:[ ],杂(什么都可以放进去),有序,可变 2.元组:(),有序,不可变 3.字典:{ },键值对,无序,可变 4.集合:{ },不可重复,无序,可变
- input range 模拟滑块
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 大话html5应用与app应用优缺点
在这个app横飞的年代,对于整个产品研发团队来讲,高速的迭代,爆炸式的功能追加已经成为了互联网行业的时代标签,以小时甚至分钟为单位的进度度量成为了常态.在这个市场大环境下,浪里淘沙的不单单是商业模式. ...
- zzulioj--1825-- 会长爱数学(模拟)
1825: 会长爱数学 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 6 Solved: 2 SubmitStatusWeb Board Descr ...