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

📄 server.java

📁 本程序是专门为局域网而建立的聊天程序,它功能有限只能用于局域网聊天当中
💻 JAVA
字号:
package It;

import java.net.*;
import java.io.*;
import java.util.*;

public class Server {
	private ServerSocket server;

	private BManager bMan = new BManager();

	public Server() {
	};

	void startServer() {
		try {
			server = new ServerSocket(2554);
			System.out.println("服务器套接字创建完毕");
			while (true) {
				Socket socket = server.accept();
				new Chat_Thread(socket).start();
				bMan.add(socket);
				bMan.sendClientInfo();
			}
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	public static void main(String[] args) {
		Server server = new Server();
		server.startServer();
	}

	class Chat_Thread extends Thread {
		Socket socket;

		private BufferedReader reader;

		private PrintWriter writer;

		Chat_Thread(Socket socket) {
			this.socket = socket;
		}

		public void run() {
			try {
				reader = new BufferedReader(new InputStreamReader(socket
						.getInputStream()));
				writer = new PrintWriter(socket.getOutputStream(), true);
				String msg;
				while ((msg = reader.readLine()) != null) {
					System.out.println(msg);
					bMan.sendToAll(msg);
				}
			} catch (Exception e) {
			} finally {
				try {
					bMan.remove(socket);
					if (reader != null)
						reader.close();
					if (writer != null)
						writer.close();
					if (socket != null)
						socket.close();
					reader = null;
					writer = null;
					socket = null;
					System.out.println("客户机离开");

					bMan.sendClientInfo();
				} catch (Exception e) {
				}
			}
		}
	}

	class BManager extends Vector {
		BManager() {
		}

		void add(Socket sock) {
			super.add(sock);
		}

		void remove(Socket sock) {
			super.remove(sock);
		}

		synchronized void sendToAll(String msg) {
			PrintWriter writer = null;
			Socket sock;
			for (int i = 0; i < size(); i++) {
				sock = (Socket) elementAt(i);
				try {
					writer = new PrintWriter(sock.getOutputStream(), true);
				} catch (IOException ie) {
				}
				if (writer != null)
					writer.println(msg);
			}
		}

		synchronized void sendClientInfo() {
			String info = "当前在线人数:" + size();
			System.out.println(info);
			sendToAll(info);
		}
	}
}

⌨️ 快捷键说明

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