java的简单群聊实现

服务器总类:

package GroupChat;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 创建调用服务器线程的主类
 * @author Administrator
 *
 */
public class ThreadMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ThreadMain tm=new ThreadMain();
		tm.StrSer(1234);
	}

	public void StrSer(int port){
		try {
			ServerSocket ss=new ServerSocket(port);
			System.out.println("服务器创建成功");
			while(true){
				Socket client=ss.accept();
				System.out.println("客户机连接");
				ServerThread st=new ServerThread(client);
				st.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

 服务器单个线程类:

package GroupChat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 创建服务器线程类,该类继承自Thread
 * @author Administrator
 *
 */
public class ServerThread extends Thread{

	private Socket client;//服务器连接对象
	private OutputStream out;//输出流对象
	private InputStream in;//输入流对象
	public User use=new User();
	/**
	 * 构造方法,传入该线程要处理的连接对象
	 * @param lient:要处理的连接对象
	 */
	public ServerThread(Socket client){
		this.client=client;
	}
	/**
	 * 重写线程的Run方法
	 */
	public void run(){
		//处理连接的方法
		ProcessChat();
	}
	/**
	 * 处理连接的方法
	 */
	private void ProcessChat() {
		try {
			out=client.getOutputStream();//获得相应的输出流对象
			in=client.getInputStream();//获得相应的输入流对象
			BufferedReader br=new BufferedReader(new InputStreamReader(in));//实例化缓冲读取信息的对象
			SendMsg("欢迎来到服务器\n请输入用户名:");
			use.name=br.readLine();
			SendMsg("请输入密码:");
			use.pew=br.readLine();
			
			boolean bool=DOT.Checkuse(use);//检验用户信息
			if(!bool){
				client.close();//如果检查不通过就关闭
				return;
			}
			
			ChatTool.AddThread(this);//添加线程
			use.logintime=System.currentTimeMillis();
			use.adress=client.getRemoteSocketAddress().toString();
			String str="";
			str=br.readLine();
			//当str为空时,也要退出。处理强行关闭客户机
			while(!"bye".equals(str)&&str!=null){
				System.out.println(use.name+":"+str);
				ChatTool.SendAll(use, str);
				str=br.readLine();
			}
			out.write(str.getBytes());
			ChatTool.DeleThread(this);
			
			client.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 向客户机发送信息的方法
	 * @param string:要发送的信息
	 */
	public void SendMsg(String str) {
		str=str+"\r\n";
		try {
			out.write(str.getBytes());
			out.flush();//强制输出
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

 用户验证类(预加载好了几个用户):

package GroupChat;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建验证用户信息的类,用来验证用户信息
 * @author Administrator
 *
 */
public class DOT {

	private static Map<String,String> map=new HashMap<String, String>();
	/**
	 * 创建验证用户信息的方法
	 * @param use:要验证的用户
	 * @return:是否成功
	 */
	public static boolean Checkuse(User use){
		if(use.pew.equals(map.get(use.name))){
			return true;//验证成功就返回True
		}
		return false;
		
	}
	static{
		for(int i=0;i<5;i++){
			User use=new User();
			use.name="name"+i;
			use.pew="pew"+i;
			map.put(use.name,use.pew);//放入map中
		}
	}
}

 

存装静态方法:

package GroupChat;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建验证用户信息的类,用来验证用户信息
 * @author Administrator
 *
 */
public class DOT {

	private static Map<String,String> map=new HashMap<String, String>();
	/**
	 * 创建验证用户信息的方法
	 * @param use:要验证的用户
	 * @return:是否成功
	 */
	public static boolean Checkuse(User use){
		if(use.pew.equals(map.get(use.name))){
			return true;//验证成功就返回True
		}
		return false;
		
	}
	static{
		for(int i=0;i<5;i++){
			User use=new User();
			use.name="name"+i;
			use.pew="pew"+i;
			map.put(use.name,use.pew);//放入map中
		}
	}
}

 用户类:

package GroupChat;
/**
 * 创建用户信息类,用来存放用户信息
 * @author Administrator
 *
 */
public class User {

	public String name;//用户名字
	public String pew;//用户密码
	public long logintime;//用户的上线时间
	public String adress;//用户的地址
}

 

你可能感兴趣的:(java)