📄 serverprocess.java
字号:
package server;
import java.io.*;
import java.net.*;
import java.sql.*;
import javax.swing.*;
import java.lang.String;
import java.sql.Connection;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
public class ServerProcess extends Thread{
private Socket socket;
private Server frameserver;
private Connection connection=null;
private PreparedStatement statement=null;
private BufferedReader in;
private PrintWriter out;
private String command="";
private String account;
public boolean shutdown; //关线程标记
public int flag=1;
public ServerProcess(Socket socket_,Server frameserver_,BufferedReader in_,PrintWriter out_) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection("jdbc:odbc:Account");
}
catch(Exception e)
{
System.out.println("ServerProcess initial"+e.toString());
}
socket=socket_;
frameserver=frameserver_;
shutdown=false;
in=in_;
out=out_;
}
//处理服务程序的主体
public void run()
{
try{
while(!shutdown)
{
command=in.readLine();
StringTokenizer st = new StringTokenizer(command,"/"); //命令解析
String cmd=st.nextToken();
//处理用户退出
if(cmd.equals("exit")) //退出
{
Exit(command);
}
//登陆处理
if(cmd.equals("login")) //登陆
{
Login(command);
}
//留言处理
if(cmd.equals("chat"))
{
Chat(command);
}
//刷新在线用户
if(cmd.equals("update"))
{
Update();
}
//处理茶餐馆
if(cmd.equals("restaurant"))
{
frameserver.AddAction("用户"+account+"进入茶餐馆客户端");
}
//处理投资公司
if(cmd.equals("invest"))
{
EnterInvest(command);
}
//处理软件公司
if(cmd.equals("soft"))
{
EnterSoft(command);
}
//处理银行
if(cmd.equals("bank"))
{
EnterBank(command);
}
//用户处理注册
if(cmd.equals("register"))
{
String temp=st.nextToken();
if(temp.equals("cancel"))
{
out.println("register/cancel");
out.flush();
frameserver.AddAction("用户取消了注册");
}
else
{
frameserver.AddAction("新用户开始注册");
Register(command);
}
}
if(cmd.equals("bankexit"))
{
frameserver.SetBankLogin(false);
frameserver.AddAction("银行服务器退出");
}
}
}
catch(Exception e)
{
System.out.println("客户断开连接");
Exit("exit/"+account);
}
//断开与用户的连接,结束线程
try{
in.close();
out.close();
connection.close();
}
catch(Exception e)
{
System.out.println("ServerProcess runend"+e.toString());
}
}
////////////////////////////////////////////////////////////////
//处理注册
public synchronized boolean Register(String command_)
{
StringTokenizer st=new StringTokenizer(command_,"/");
st.nextToken();
String account=st.nextToken();
String name=st.nextToken();
String code=st.nextToken();
String sort=st.nextToken();
try{
String sql="select* from Account";
statement=connection.prepareStatement(sql);
ResultSet result=statement.executeQuery();
while(result.next())
{
String a=result.getString("帐号");
if(account.equals(a))
{
out.println("register/failure");
out.flush();
result=null;
statement.close();
frameserver.AddAction("帐号已存在,新用户注册失败");
return false;
}
}
}
catch(Exception e)
{
System.out.println("Register"+e.toString());
}
try{
String sql_="insert into Account(帐号,密码,名称,类别)values('";
sql_+=account+"','";
sql_+=code+"','";
sql_+=name+"','";
sql_+=sort+"')";
statement=connection.prepareStatement(sql_);
statement.executeUpdate();
out.println("register/success");
out.flush();
statement.close();
}
catch(Exception e)
{
System.out.println("ServerProcess Register"+e.toString());
}
frameserver.AddAction("新用户注册成功");
return true;
}
/////////////////////////////////////////////////////////////////////////
//处理用户登陆
public void Login(String command_)
{
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String temp=st.nextToken();
if(temp.equals("cancel"))
{
out.println("login cancel/success"); //取消登陆
out.flush();
frameserver.AddAction("用户取消登陆");
shutdown=true; //服务器关闭相应处理线程
}
else if(temp.equals("register"))
{
out.println("login/register");
out.flush();
}
else
{
InetAddress inet=socket.getInetAddress();
frameserver.AddAction("用户尝试登陆,IP:"+inet.getHostAddress());
ClientLogin clientlogin=new ClientLogin(command,frameserver,socket);
String str=clientlogin.Validate();
if(str.equals("success"))
{
out.println("login/success"); //登陆成功
out.flush();
account=temp;
}
else if(str.equals("failure"))
{
out.println("login/failure");
out.flush();
frameserver.AddAction("用户登陆失败");
}
else if(str.equals("already"))
{
out.println("login/already");
out.flush();
frameserver.AddAction("用户已登陆");
}
}
}
//////////////////////////////////////////////////////////////////////////
//处理用户留言
public void Chat(String command_)
{
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String inwords=st.nextToken();
frameserver.AddWords(inwords);
String outwords="chat";
for(int i=0;i<frameserver.NumWords();i++)
{
outwords+=("/"+frameserver.GetWords(i));
}
out.println(outwords);
out.flush();
}
///////////////////////////////////////////////////////////////////////////////
//处理在线用户更新
public void Update()
{
int count=frameserver.vector.size();
String s="update";
for(int i=0;i<count;i++)
{
ClientInfo clientinfo=(ClientInfo)frameserver.vector.get(i);
s+=("/"+clientinfo.ReturnAccount());
}
out.println(s);
out.flush();
}
///////////////////////////////////////////////////////
public void Exit(String command_)
{
ClientExit clientexit=new ClientExit(command_,frameserver);
clientexit.Exit();
out.println("exit/success");
out.flush();
try{
in.close();
out.close();
socket.close();
}
catch(Exception e)
{
System.out.println("ServerProcess Exit"+e.toString());
}
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String account=st.nextToken();
if(account.equals("bank"))
{
frameserver.SetBankLogin(false);
}
if(account.equals("software"))
{
frameserver.SetSoftLogin(false);
}
if(account.equals("invest"))
{
frameserver.SetInvestLogin(false);
}
shutdown=true;
}
/////////////////////////////////////////////////////
//处理软件公司
public void EnterSoft(String command_)
{
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String cs=st.nextToken();
String account=st.nextToken();
if(cs.equals("client"))
{
if(frameserver.IfSoftLogin())
{
out.println("soft/client/success/"+frameserver.SoftwareIP);
out.flush();
frameserver.AddAction("用户"+account+"进入软件公司客户端");
}
else
{
out.println("soft/client/failure");
out.flush();
frameserver.AddAction("用户"+account+"无法连接到软件公司的客户端,进入失败");
}
}
else
{
if(frameserver.IfSoftLogin())
{
out.println("soft/server/already");
out.flush();
frameserver.AddAction("软件公司服务器已经开启,再开启失败");
}
else
{
boolean b_=true;
frameserver.SetSoftLogin(b_);
out.println("soft/server/success");
out.flush();
frameserver.AddAction("软件公司服务器开启");
}
}
}
//////////////////////////////////////////////////////
// 处理投资公司
public void EnterInvest(String command_)
{
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String cs=st.nextToken();
String account=st.nextToken();
if(cs.equals("client"))
{
if(frameserver.IfInvestLogin())
{
out.println("invest/client/success/"+frameserver.InvestIP);
out.flush();
frameserver.AddAction("用户"+account+"进入投资公司客户端");
}
else
{
out.println("invest/client/failure");
out.flush();
frameserver.AddAction("用户"+account+"无法连接到投资公司的客户端,进入失败");
}
}
else
{
if(frameserver.IfInvestLogin())
{
out.println("invest/server/already");
out.flush();
frameserver.AddAction("投资公司服务器已经开启,再开启失败");
}
else
{
boolean b_=true;
frameserver.SetInvestLogin(b_);
out.println("invest/server/success");
out.flush();
frameserver.AddAction("投资公司服务器开启");
}
}
}
/////////////////////////////////////////////////////////////////////////////////
//处理银行
public void EnterBank(String command_)
{
StringTokenizer st = new StringTokenizer(command_,"/");
st.nextToken();
String cs=st.nextToken();
String account=st.nextToken();
if(cs.equals("client"))
{
if(frameserver.IfBankLogin())
{
out.println("bank/client/success/"+frameserver.BankIP);
out.flush();
frameserver.AddAction("用户"+account+"进入中国银行");
}
else
{
out.println("bank/client/failure");
out.flush();
frameserver.AddAction("用户"+account+"无法连接到银行的客户端,进入失败");
}
}
else
{
if(frameserver.IfBankLogin())
{
out.println("bank/server/already");
out.flush();
frameserver.AddAction("银行服务器已经开启,再开启失败");
}
else
{
boolean b_=true;
frameserver.SetBankLogin(b_);
out.println("bank/server/success");
out.flush();
frameserver.AddAction("银行服务器开启");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -