⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientthread.java

📁 java编写聊天室
💻 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 + -