把自己曾经写的一个客户间聊天的程序与大家分享(7)

本文介绍了一个基于Java的用户登录验证系统的设计与实现细节。该系统通过检查用户名和密码的有效性来验证用户身份,并能够处理注册请求。文章还讨论了如何通知在线用户新用户的加入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package Server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;

/**
* CheckUser类主要是用来验证登录用户的信息(检测数据库中的数据)
* @author lijiapeng
*
*/
public class CheckUser{

private Socket socket;
private BufferedReader in;
private PrintWriter out;
private Connection c=null;
private boolean flag1=false;
private boolean flag2=false;

public CheckUser(Socket s,BufferedReader in,PrintWriter out){
this.socket=s;
this.in=in;
this.out=out;
try{
c=new DataSource().getConnection();
}catch(Exception e){
e.printStackTrace();
}
}

public void check(){
try{
while(true){
String str=in.readLine();
if(str.equals("login")){
String sql="select username,password from info;";
Statement sta=c.createStatement();
String username=in.readLine().trim();
String password=in.readLine();
ResultSet r=sta.executeQuery(sql);
while(r.next()){
String name=r.getString("username").trim();
String pwd=r.getString("password");
//如果用户名与密码相符
if(name.equals(username)&&pwd.equals(password)){
//如果该用户在线,则通知客户
if(Server.getNameToSocket().containsKey(name)){
out.println("OnLine");
out.flush();
break;
}else{
flag1=true;
out.println("pass");
out.flush();
//把该客户的用户名与输出流的映射关系存到服务器
Server.getNO().put(name, out);
//把该用户上线通知告诉其他在线用户
//取得在线用户
Map nameToSocket=Server.getNameToSocket();
Set nts=nameToSocket.keySet();
Iterator itt=nts.iterator();
while(itt.hasNext()){
//取得其中的一个用户名
String na=(String)itt.next();
//得到与该用户的输出流
PrintWriter outt=null;
outt=(PrintWriter)Server.getNO().get(na);
//告诉用户这是新增加的一个用户
outt.println("add");
outt.flush();
//把新登录的用户的名字发给该用户,实现在线用户的更新
outt.println(name);
outt.flush();
}

//登录成功,把其设为在线用户,即更新在线用户
Server.getNameToSocket().put(name,socket);
//再次取得在线用户,主要是为了是itt移到第一位
nts=nameToSocket.keySet();
//实现刚登录用户下拉框所表现的在线用户的初始化

//得到一个在线用户的对象数组
Object onLineUser[]=nts.toArray();
itt=nts.iterator();
//给刚登录客户逐个发送在线用户信息
while(itt.hasNext()){
String na=(String)itt.next();
//给刚登录的用户发送在线用户的用户名
out.println(na);
out.flush();
}
out.println("theEnd");
out.flush();
break;
}
}
//如果用户名存在,但是密码不正确
else if(name.equals(username)&&!pwd.equals(password)){
flag2=true;
out.println("passwordWrong");
out.flush();
break;
}
}
//该用户不存在(即输入的用户名数据库中无记录),并提示对方是不是要新建一个用户
if(flag1==false&&flag2==false){
out.println("false");
out.flush();
continue;
}else if(flag1==true&&flag2==false){
break;
}else if(flag1==false&&flag2==true){
flag2=false;
continue;
}
}else if(str.equals("registry")){
String un=new String();
try{
Statement s=c.createStatement();
String username=in.readLine();
un=username;
String trueusername=in.readLine();
String password=in.readLine();
String sex=in.readLine();
String age=in.readLine();
String job=in.readLine();
String mail=in.readLine();
String address=in.readLine();
String sql1="select * from info where username='"+username+"';";
ResultSet r=s.executeQuery(sql1);
if(r.next()){
out.println("usernameExist");
continue;
}
String sql2="select * from info where mail='"+mail+"';";
r=s.executeQuery(sql2);
if(r.next()){
out.println("mailExist");
continue;
}else{
String sql3="insert into info values('"+username+"','"+trueusername+"','"+password+"','"+sex+"','"+age
+"','"+job+"','"+mail+"','"+address+"')";
s.execute(sql3);
out.println("ok");
}
}catch(Exception e3){

System.out.println(e3.getMessage());
// out.println("error");
}
}
}
}catch(Exception e1){
e1.printStackTrace();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值