📄 server.java
字号:
import java.net.*;
import java.io.*;
import java.sql.*;
import java.util.*;
////////////////////////////////////////////小布点---服务器端
public class Server extends Thread
{
ServerSocket server;
Connection c;
DataOutputStream writer;
//boolean bo;
Socket sock ;
HashMap map;
Vector v;
public Server()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载JDBC驱动
c = DriverManager.getConnection("jdbc:odbc:chatbo","sa","");//将JDBC ODBC联系起来,连接上数据源
server = new ServerSocket(9990); //开启服务端口
System.out.println("服务器正在启动");
map=new HashMap();
v=new Vector();
}
catch(Exception e)
{
System.out.println(e);
e.printStackTrace();
}
this.start();
}
public void run()
{ //监听线程
while(server != null)
{
try{
//监听并接受客户端的请求
Socket soc = server.accept();
System.out.println("正在监听");
//为每个连接上来的客户端启动一个线程
//该线程用于和客户交换信息,故以该客户的socket为参数
new EveryClientThread(soc);
}
catch(Exception e){e.printStackTrace();}
}
};
class EveryClientThread extends Thread
{
Socket sock ;
//ObjectInputStream in;
PreparedStatement ps;
public EveryClientThread(Socket s)
{
sock = s;
// try
// {
// //因客户端传递过来的是对象,故用对象流包装
// in = new ObjectInputStream(sock.getInputStream());
// }catch(Exception e)
// {
// System.out.println(e);
// e.printStackTrace();
//
// }
this.start();
}
public void run()
{
while(true)
{
Object obj;
try
{
ObjectInputStream in = new ObjectInputStream(sock.getInputStream());
obj = in.readObject();
//****************************************登录 解包**********************************************************************
//判断传递过来的是否是UserInfo的实例
if(obj instanceof UserInfo)
{
boolean b;
UserInfo user = (UserInfo)obj;
//解包
String name = user.getUserName();
String pwd = user.getUserPwd();
System.out.println("名字: "+name);
System.out.println("密码: "+pwd);
//准备发送SQL语句
ps = c.prepareStatement("select * from UserInfo02 where userName=? and userPwd=?");
ps.setString(1,name);
ps.setString(2,pwd);
//执行SQL语句,得到结果集
ResultSet result = ps.executeQuery(); // 类型俩边要相符合
//判断是否有相关记录
b = result.next();
//关闭连接
result.close();
ps.close();
//sock.close();
try
{
writer = new DataOutputStream(sock.getOutputStream());
writer.writeBoolean(b);
writer.flush();
System.out.println(b);
System.out.println("登录传送完成!come on! ");
}
catch(Exception e){e.printStackTrace();}
System.out.println(b);
if(b)
{
map.put(user.getUserName(),sock);
v.add(user.getUserName());
new liebiao();
}
}
//*************************************注册 解包*************************************************
//判断传递过来的是否是UserRegistrg的实例
if(obj instanceof UserRegistrg)
{
try
{
boolean bo;
UserRegistrg u = (UserRegistrg)obj;
//解包
String name = u.getUserName();
String pwd = u.getUserPwd();
String Age = u.getlabelAge();
String label06 = u.getlabel06();
String label08 = u.getlabel08();
System.out.println("注册名字: "+name);
System.out.println("注册密码: "+pwd);
System.out.println("注册用户信息-年龄: "+Age);
System.out.println("注册用户信息-回答问题1: "+label06);
System.out.println("注册用户信息-回答问题2: "+label08);
//准备发送SQL语句
ps = c.prepareStatement("Insert into UserInfo02 (userName,userPwd,Age,Answer01,Answer02) values(?,?,?,?,?)");
ps.setString(1,name);
ps.setString(2,pwd);
ps.setString(3,Age);
ps.setString(4,label06);
ps.setString(5,label08);
//执行SQL语句,得到结果集
int res = ps.executeUpdate();
//关闭连接
ps.close();
try
{
writer = new DataOutputStream(sock.getOutputStream());
writer.writeInt(res);
writer.flush();
System.out.println(res);
System.out.println("注册传送完成!come on!");
}
catch(Exception e1){e1.printStackTrace();}
}
catch(Exception e1)
{
System.out.println(e1);
e1.printStackTrace();
}
}
//***************************************************************************************************************
//*******************************忘记密码 解包*************************************************************
//判断传递过来的是否是UserUpateInfo的实例
if(obj instanceof UserUpateInfo)
{
try
{
boolean bo;
UserUpateInfo us = (UserUpateInfo)obj;
//////////////////////解 包///////////////////////////
String name = us.getUserName();
String jltopic1 = us.getjltopic1();
String jltopic2 = us.getjltopic2();
String jltopic3 = us.getjltopic3();
System.out.println("用户忘记密码--用户名: "+name);
System.out.println("用户忘记密码--回答问题答案1: "+jltopic1);
System.out.println("注册用户信息-回答问题答案2: "+jltopic2);
// System.out.println("注册用户信息-回答问题答案3: "+jltopic3);
//准备发送SQL语句
ps = c.prepareStatement("select UserPwd from UserInfo02 where userName=? and answer01=? and answer02=?");
ps.setString(1,name);
ps.setString(2,jltopic1);
ps.setString(3,jltopic2);
// ps.setString(4,jltopic3);
//执行SQL语句,得到结果集
ResultSet result = ps.executeQuery();
// //判断是否有相关记录
bo = result.next();
String pwd = "";
if(bo)
{
pwd = result.getString(1);
}
//关闭连接
result.close();
//关闭连接
ps.close();
try
{
writer = new DataOutputStream(sock.getOutputStream());
writer.writeUTF(pwd);
writer.flush();
System.out.println(pwd);
System.out.println("忘记密码送完成!come on!");
//JOptionPane.showMessageDialog(pwd);
}
catch(Exception e2){e2.printStackTrace();}
System.out.println("恭喜您-您的用户密码是: "+pwd);
}
catch(Exception e2)
{
System.out.println(e2);
e2.printStackTrace();
}
}
//************************* 修 改 资 料 解 包 区 **********************************************
//&***************************** //判断传递过来的是否是UserRetake的实例
if(obj instanceof UserRetake)
{
try
{
boolean bo;
UserRetake rt = (UserRetake)obj;
//解包
String Name = rt.getUserName();
String number =rt.getnumber();
String realName =rt.getrealName();
String school = rt.getschool();
String HomePage =rt.getHomePage();
System.out.println("用户帐号 "+number);
System.out.println("用户呢称: "+Name);
System.out.println("真实姓名: "+realName);
System.out.println("毕业学校: "+school);
System.out.println("个人主页 "+HomePage);
//准备发送SQL语句
ps = c.prepareStatement("update UserInfo02 set realName=?,usershool=?,age=?,userHomePage=? where userName=? ");
ps.setString(1,Name);
ps.setString(2,number);
ps.setString(3,realName);
ps.setString(4,school);
ps.setString(5,HomePage);
//执行SQL语句,得到结果集
int rr = ps.executeUpdate();
//关闭连接
ps.close();
try
{
writer = new DataOutputStream(sock.getOutputStream());
writer.writeInt(rr);
writer.flush();
System.out.println(rr);
System.out.println("修改传送完成!come on!");
}
catch(Exception eee){eee.printStackTrace();}
} catch(Exception eee)
{
System.out.println(eee);
eee.printStackTrace();
}
}
//************************************公聊
if(obj instanceof Message)
{
Message m;
ServerResults sr = new ServerResults();
sr.setstatue(1);
m=(Message)obj;
int flag=m.getflag();
System.out.println(flag);
if(flag==0)
{ if(!map.isEmpty())
{
System.out.println("公聊");
Iterator i=map.keySet().iterator();
while(i.hasNext())
{ try
{ Object obj1=i.next();
Socket soc=(Socket)map.get(obj1);
sr.setMessage1(m);
ObjectOutputStream oos = new ObjectOutputStream(soc.getOutputStream());
oos.writeObject(sr);
oos.flush();
} catch(Exception e) { e.printStackTrace(); }
}
}
}
//******************************************私聊
if(flag==1)
{
System.out.println("私聊");
Socket soc=(Socket)map.get(m.getsender());
Socket soc1=(Socket)map.get(m.getaccept());
ObjectOutputStream oos = new ObjectOutputStream(soc.getOutputStream());
ObjectOutputStream oos1 = new ObjectOutputStream(soc1.getOutputStream());
sr.setMessage1(m);
oos.writeObject(sr);
oos1.writeObject(sr);
oos.flush();
oos1.flush();
}
}
}catch(Exception e){e.printStackTrace();}
// ////////////////////////////////////////////////////////
}}}
public static void main(String[] args)
{
new Server();
}
class liebiao extends Thread
{
public liebiao() //在线用户列表
{
this.start();
}
public void run()
{
if(!map.isEmpty())
{
Iterator i=map.keySet().iterator();
while(i.hasNext())
{ try
{ Object obj=i.next();
Socket soc=(Socket)map.get(obj);
ServerResults server = new ServerResults();
server.setVoctor(v);
System.out.println(v);
server.setstatue(0);
System.out.print("server 298");
ObjectOutputStream oos = new ObjectOutputStream(soc.getOutputStream());
oos.writeObject(server);
System.out.println( server.getVoctor());
} catch(Exception e) { e.printStackTrace(); }
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -