TCP客户端并发登录
要求: 客户端通过键盘录入用户名。服务端对这个用户名进行校验。 如果该用户存在,在服务端显示xxx,已登陆。并在客户端显示
xxx,欢迎光临。 如果该用户存在,在服务端显示xxx,尝试登陆。并在客户端显示 xxx,该用户不存在。最多就登录三次。
服务端
package com.gec.work3;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
class UserThread implements Runnable{
private Socket s;
public UserThread(Socket s) {
this.s = s;
}
@Override
public void run() {
//获取ip
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "....连接进来");
try {
int i = 0;
while((i++) <= 2) {
//获得客户端写的用户名
BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
//接收客户端名字
String name = bufin.readLine();
if(name == null) {
break;
}
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
//打印流 这是往客户端响应内容
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String line = null;//因为这个变量是可以作为两种情况
boolean flag = false;
while((line = bufr.readLine()) != null) {
//line是读取txt的名字
if(line.equals(name)) {
flag = true;//有这个人
break;
}
}
if(flag) {
System.out.println(name+",已登录");
out.println(name + ",欢迎光临");
}else {
System.out.println(name + ",尝试登录");
out.println(name + ",用户名不存在");
}
}
s.close();
} catch (Exception e) {
System.out.println(e.getMessage());
throw new RuntimeException("校验失败");
}
}
}
public class EnterServer {
public static void main(String[] args) throws IOException {
//服务端套接字
ServerSocket ss = new ServerSocket(8888);
while(true) {
Socket s = ss.accept();
new Thread(new UserThread(s)).start();
}
}
}
客户端
package com.gec.work3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class EnterClient {
public static void main(String[] args) throws IOException {
//客户端套接字
Socket s = new Socket("127.0.0.1",8888);
//带缓冲的reader 获得键盘输入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//printwriter 往服务端写内容
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//s.getInputStream() 获得服务端的响应
BufferedReader bufi = new BufferedReader(new InputStreamReader(s.getInputStream()));
//循环
for(int i = 0;i < 3;i++) {
System.out.println("请您输入用户名:");
String line = bufr.readLine();
if(line == null) {
break;
}
out.println(line);//打印服务端响应的内容
String info = bufi.readLine();
System.out.println("info:" + info);
if(info.contains("欢迎")) {
break;
}
}
bufr.close();
s.close();
}
}
效果图
注意:user.txt的编码要和eclipse的设置编码保持一致,重要的事情说三遍。
数据库
数据库的概念
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统)数据库管理系统(DataBase Management
System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
数据库的分类
- Mysql(重点)
- Oracle(重点)
- Sql Server(了解)
- DB2
- PostgreSQL
- Sybase(电信系统)
数据库的安装
基本步骤 a)下载Mysql数据库软件 https://www.mysql.com/ b)安装Mysql * 安装 * 参照图解
* 一路下一步
- 配置 * 参照图解 * 到选择字符集时停
登录Mysql: mysql -u root -p
卸载
1.停止mysql服务 net stop mysql 启动mysql服务 net start mysql
2.卸载mysql
3.找到mysql 安装目录下的 my.ini datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”修改密码 运行cmd * 安装成功了打开cmd --> mysql -uroot -p你的密码 * 修改mysql
root用户密码 1) 停止mysql服务 运行输入services.msc 停止mysql服务
或者 cmd --> net stop mysql 2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口) 3) 新打开cmd 输入mysql -u root -p 不需要密码 use mysql; update user set password=password(‘abc’) WHERE User=‘root’; 4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程 5) 在服务管理页面
重启mysql 服务 密码修改完成
数据库其它知识点介绍
.数据库软件、数据库、表的关系
- 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库创建 多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如图所示:
数据在数据库中的存储方式
如何操作数据库
数据库管理系统可以通过SQL(结构化查询语言)来定义和操作数据,维护数据的完整性和安全性,以及进行各种数据库的管理等。
常用命令
mysql>show databases; 显示所有表
mysql>use mysql; 切换到表mysql
mysql>show tables; 显示表的结构
mysql>drop database 库名;删除数据库
mysql>drop table 表名;删除表
mysql>exit;退出mysql
cmd
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uroot -p Enter
password: **** Welcome to the MySQL monitor. Commands end with ; or
\g. Your MySQL connection id is 4 Server version: 5.7.21-log MySQL
Community Server (GPL)Copyright © 2000, 2018, Oracle and/or its affiliates. All rights
reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input
statement.mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | mysql | | performance_schema | | sys |
±-------------------+ 4 rows in set (0.00 sec)mysql> create database g2148; Query OK, 1 row affected (0.00 sec)
mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | g2148 | | mysql | | performance_schema | | sys |
±-------------------+ 5 rows in set (0.00 sec)mysql> use g2148; Database changed mysql> drop database g2148; Query
OK, 0 rows affected (0.00 sec)mysql> show databases;
±-------------------+ | Database |
±-------------------+ | information_schema | | mysql | | performance_schema | | sys |
±-------------------+ 4 rows in set (0.00 sec)mysql> create database g2148; Query OK, 1 row affected (0.00 sec)
mysql> use g2148; Database changed mysql> create table t_user(id
int,name varchar(30)); Query OK, 0 rows affected (0.01 sec)mysql> show tables;
±----------------+ | Tables_in_g2148 |
±----------------+ | t_user |
±----------------+ 1 row in set (0.00 sec)mysql> drop table t_user; Query OK, 0 rows affected (0.01 sec)
mysql> show tables; Empty set (0.00 sec)
查询表中数据
基本查询
#先创建数据库 CREATE DATABASE hrm;
#1.查询性别为男,并且年龄为20的学生记录
SELECT * FROM employees WHERE sex=‘male’ AND age = 20;#2.查询员工id是101或者名字是Neena的记录
SELECT * FROM employees WHERE employee_id = 101 OR first_name = ‘Neena’;#3.查询员工id是101,102,103的记录 and && 左右两个都要为真 or 左为真或右为真
SELECT * FROM employees WHERE employee_id = 101 OR employee_id = 102 OR employee_id = 103; SELECT * FROM employees WHERE employee_id IN(101,102,103);
#4.查询姓名为null的记录
SELECT * FROM employees WHERE first_name IS NULL;#5.查询姓名不为null的员工记录
SELECT * FROM employees WHERE first_name IS NOT NULL;#6.查询年龄在20-23之间的学生记录
SELECT * FROM employees WHERE age BETWEEN 20 AND 23; SELECT * FROM employees WHERE age >= 20 AND age <=23;#7.查询性别非男的员工记录
SELECT * FROM employees WHERE sex = ‘female’;#修改语句
UPDATE employees SET sex = ‘male’; UPDATE employees SET age = 23;
模糊查询和分页查询
#模糊查询
like ‘%li’ 结尾的员工
SELECT * FROM employees WHERE first_name LIKE ‘%li’
#以 Va开头的员工信息
SELECT * FROM employees WHERE first_name LIKE ‘Va%’;SELECT * FROM employees WHERE first_name LIKE ‘%o%’
#通配符 _
SELECT * FROM employees WHERE first_name LIKE ‘_o%’#分页
SELECT COUNT(0) FROM employees;#每页显示10条 107/10 = 10…7 11页
#查询第一页数据 当前页码是1 (1-1)*10
SELECT * FROM employees LIMIT 0,10#第二页 (2-1)*10 10
SELECT * FROM employees LIMIT 10,10#第三页 (3-1)*10
SELECT * FROM employees LIMIT 20,10#第十一页 (11-1)*10
SELECT * FROM employees LIMIT 100,10
还想了解更多请点击下面链接
Mysql安装资源:
https://download.csdn.net/download/weixin_45523942/21015683