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

📄 server.java

📁 JAVA做的一个简单的聊天室软件
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.util.Vector;
public class Server {
	static Vector socketVector=new Vector();
	static Vector UserList=new Vector();
	public static void initAuthFile() throws Exception {
		
		String ups[] = new String[] {"hackgun", "1234", "Wakao", "1234","lala0","1234"};
		DataOutputStream dos = new DataOutputStream(new FileOutputStream(ClientThread.authFile));
		for (int i = 0; i < ups.length; i++) {
			dos.writeUTF(ups[i]);
		}
		dos.close();
	}
	public static void main(String[] args) {
		ServerSocket serverSocket;
		try {
			initAuthFile();
			serverSocket = new ServerSocket(10002);
			while (true) {
				Socket clientSocket = serverSocket.accept();
				ClientThread ct = new ClientThread(clientSocket);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


class ClientThread extends Thread {
	static String logFile = "log.txt";

	static String authFile = "auth.dat";
	Vector sline=new Vector(); 

	String user;
	Socket socket;

	BufferedReader sin;

	PrintWriter sout;

	PrintWriter log;

	public ClientThread(Socket client) {
		socket = client;
		try {
			sin = new BufferedReader(new InputStreamReader(client
					.getInputStream()));
			sout = new PrintWriter(new OutputStreamWriter(client
					.getOutputStream()));

			log = new PrintWriter(new FileWriter(new File(logFile), true));
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("connection break");
			close();
			return;
		}
		this.start();
	}

	public void close() {
		try {
			sin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			sout.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			log.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			Server.socketVector.removeElement(socket);
			Server.UserList.removeElement(user);
			sendmsgtoall("/RefreshUserList");
			sendmsgtoall("/lessuser");
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 public synchronized void sendmsgtoall(String msg){
		PrintWriter sout_2;
		Socket socket_2;
		
		try{
			if (msg.equals("/RefreshUserList")){
				for (int i = 0; i < Server.socketVector.size(); i++){
					socket_2 =  ((Socket) Server.socketVector.elementAt(i));
					sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
					sout_2.println("/RefreshUserList");
					for (int i2 = 0; i2 < Server.UserList.size(); i2++){
						sout_2.println(Server.UserList.elementAt(i2));
					}
					sout_2.println("SendUserList/");
					sout_2.flush();
				}
			}
			else if(msg.equals("/TALK")){
				for (int i = 0; i < Server.socketVector.size(); i++){
					socket_2 =  ((Socket) Server.socketVector.elementAt(i));
					sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
					sout_2.println("/TALK");
//					sout_2.println(user+"˵:");
					for (int i2 = 0; i2 < sline.size(); i2++){
						sout_2.println((String) sline.elementAt(i2));
					}
					sout_2.flush();
				}
			}
			else if(msg.equals("/lessuser")){
				for (int i = 0; i < Server.socketVector.size(); i++){
					socket_2 =  ((Socket) Server.socketVector.elementAt(i));
					sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
					sout_2.println("/lessuser");
					sout_2.println(user);
					sout_2.flush();
				}
			}
			else if(msg.equals("/adduser")){
				for (int i = 0; i < Server.socketVector.size(); i++){
					socket_2 =  ((Socket) Server.socketVector.elementAt(i));
					sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
					sout_2.println("/adduser");
					sout_2.println(user);
					sout_2.flush();
				}
			}
			
		}catch (IOException e) {
			//e.printStackTrace();
			System.out.println("connection break");
			
			close();
			return;
		}
	}
	public void run() {
		String line, pass;
		PrintWriter sout_2;
		Socket socket_2;
		// login auth
		try {
			user = sin.readLine();
			pass = sin.readLine();
			checkLogin(user, pass);
		} catch (IOException e) {
			//e.printStackTrace();
			System.out.println("connection break");
			close();
			return;
		} catch (AuthException e) {
			//e.printStackTrace();
			System.out.println("auth fail");
			close();
			return;
		}
		sout.println("login succ");
		sout.flush();
		Server.socketVector.addElement(socket);
		Server.UserList.addElement(user);
		sendmsgtoall("/RefreshUserList");
		sendmsgtoall("/adduser");
		try {
			while (true) {
				line = sin.readLine();
				if (line.equals( "/logout")) break;
//				if (line.equals("/GetUserList")){
//					sout.println("/RefreshUserList");
//					for (int i = 0; i < Server.UserList.size(); i++){
//						sout.println(Server.UserList.elementAt(i));
//					}
//					sout.println("SendUserList/");
//					sout.flush();					
//				}
				if (line.equals("/TALK"))
				{
					//
					while (line.equals("TALK/") == false){
						line = sin.readLine();
						sline.addElement(line);
					}
					sendmsgtoall("/TALK");
					sline.clear();
					
				}
				log.println(line);
//				System.out.println("recv from "
//						+ socket.getRemoteSocketAddress() + ":" + line);
			}

		} catch (IOException e) {
			//e.printStackTrace();
			System.out.println("connection break");
			
			close();
			return;
		}
		System.out.println("close conn");
		close();
	}

	public void checkLogin(String user, String pass) throws AuthException {
		DataInputStream din = null;
		try {
			din = new DataInputStream(new FileInputStream(authFile));
			while (din.available() != 0) {
				String u = din.readUTF();
				String p = din.readUTF();
				if (user.equals(u) && pass.equals(p)) {
					System.out.println(user + " login succ");
					return;
				}
				if (din.available() == 0) {
					throw new AuthException("login fail");
				}
			}
		} catch (Exception e) {
			System.out.println(user + " login fail");
			throw new AuthException("login fail");
		} finally {
			try {
				din.close();
			} catch (Exception e) {
				//e.printStackTrace();
			}
		}
	}
}

class AuthException extends Exception {
	String mess;

	public AuthException(String mess) {
		this.mess = mess;
	}

	public String toString() {
		return mess;
	}

	public String getMessage() {
		return mess;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -