📄 clientthread.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.net.*;
import user.action.*;
import user.entity.*;
import user.manager.*;
class ClientThread extends Thread {
Socket socket;
PrintStream write;
BufferedReader read;
ServerThread sThread;
StringTokenizer st;
String m,Name,info;
String GroupName;
String Login;
String Register;
public static int ConnectNumber=0;
public static int UserNumber=0;
public ClientThread(Socket cSocket,ServerThread sThread){
this.socket=cSocket;
this.sThread=sThread;
ConnectNumber++;
//System.out.println("ClientThread先运行");
try{
write=new PrintStream(socket.getOutputStream());
read=new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch(IOException e){
System.out.println("发生异常:"+e);
System.out.println("建立I/O通道失败!");
System.exit(3);
}
}
public void run(){
while(true){
try{
String Message=read.readLine();
//sThread.sStatus.append(Message);
synchronized(sThread.messages){//同步处理
if(Message!=null)
{
if(Message.equals("Exit"))
{
ConnectNumber--;
UserNumber=ConnectNumber;
Message=getClientName()+":"+getClientAddress()+"已经离开";
sThread.sStatus.append(Message+" ");
sThread.sStatus.append("目前联机数"+UserNumber+"\n");
synchronized(sThread.Clients)
{
sThread.Clients.removeElement(this);
}
synchronized(sThread.username)
{
sThread.username.removeElement(this.Name);
}
break;
}
else if(Message.equals("断开连接"))//该功能检查用户登录和注册情况连线
{
ConnectNumber--;
}
else{
st=new StringTokenizer(Message,":");//获取关键字
String keyword=st.nextToken();//获取关键字
if(keyword.equals("LOG"))//登陆关键字,执行登陆操作
{
String password,Username;
Username=st.nextToken();
password=st.nextToken();
User user=new User();
user.setUserName(Username);
user.setUserPassword(password);
if(checkName(Username))
{
System.out.println(Username);
System.out.println(password);
if(Manager.checkUser(user))
//if((Username.equals("lys")&&password.equals("123"))||
// (Username.equals("lj")&&password.equals("123")))
{
//
Login="登录成功";
UserNumber++;
Name=Username;
//GroupName=st.nextToken();
sThread.sStatus.append(getClientName()+":");
sThread.sStatus.append(getClientAddress()+"已联机 ");
sThread.sStatus.append("目前联机数:"+ConnectNumber+"\n");
synchronized(sThread.Clients)
{
if(Login.equals("登录成功"))
{
sThread.Clients.addElement(this);
sThread.username.addElement(Username);
//System.out.println(sThread.Clients.size());
}
}
}
else{
Login="登录失败";
}
//String uu=(String)sThread.username.elementAt(ConnectNumber-1);
//System.out.println(uu);
write.println(Login);
}
else
{
Login="登录失败";
write.println(Login);
System.out.println("用户重登陆了");
}
}
else if(keyword.equals("REG"))//注册关键字,执行注册操作
{
User user=new User();
String password,Username,sex;
Username=st.nextToken();
password=st.nextToken();
sex=st.nextToken();
System.out.println(Username);
System.out.println(password);
System.out.println(sex);
user.setUserName(Username);
user.setUserPassword(password);
user.setUserSex(sex);
if(UserAction.insert(user))
{
Register="注册成功";
write.println(Register);
}
else
{
Register="注册失败";
write.println(Register);
//System.out.println("charushibai");
}
ConnectNumber--;
}
else{
System.out.println(Message);
Name=st.nextToken();//可以聊天的客户呢称
sThread.messages.addElement(Message);//广播客户端信息
}
}
}
}
}
catch(IOException e){
System.out.println("接受的消息出错:"+e);
break;//结束线程
}
}
}
public String getClientName(){//获取客户机主机名
return socket.getInetAddress().getHostName();
}
public String getClientAddress(){//获取客户机主机IP地址
return socket.getInetAddress().getHostAddress();
}
public boolean checkName(String u)
{
String Uname;
for(int i=0;i<sThread.username.size();i++)
{
Uname=(String)sThread.username.elementAt(i);
if(!Uname.equals(u)) continue;
else return false;
}
return true;
}
public void finalize(){
try{
read.close();
write.close();
socket.close();
}
catch(IOException e){
System.out.println("发生不能关闭异常:"+e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -