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

📄 server5.java

📁 聊天功能,通过进入聊天介面可以和对方进行聊天
💻 JAVA
字号:

import java.net.*;
import java.io.*;
import java.util.*;
public class Server5 {
	private ServerSocket server;
	private BManager bMan = new BManager();//消息广播者
	public Server5() {}
	void startServer() {
		try {
			server = new ServerSocket(7777);
			System.out.println("服务器套接字创建完毕");
			while(true) {
				Socket socket = server.accept();
				//创建并运行与客户机通信的线程
				new Chat_Thread(socket).start();
				//向消息广播者列表添加socket
				bMan.add(socket);
				//向消息广播者所有客户机传送当前连接人数
				bMan.sendClientInfo();
			}
		}catch(Exception e) {
			System.out.println(e);
		}
	}
	public static void main(String[] args) {
		Server5 server = new Server5();
		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 {
						//从消息广播者列表删除socket
						bMan.remove(socket);
						if(reader != null) reader.close();
						if(writer != null) writer.close();
						if(socket != null) socket.close();
						reader = null; riter = null; socket = null;
						
						System.out.println("客户机离开");
						
						//向所有客户机传送当前连接从数
						bMan.sendClientInfo();
					} catch(Exception e) {}
				}
			}
		}
		//消息广播者类继承vector类
		class BManager extends Vector {
			BManager () {}
			void add(Socket sock) {
				super.add(sock);//添加套接字
			}
			void remove(Socket sock) {
				super.remove(sock);//删除套接字
			}
			//向所有客户机传送msg,同步化方法
			 synchronized void sendToAll(String msg) {
				 PrintWriter writer = null;//输出流
				 Socket sock;               //套接字
				 
				 for(int i = 0;i <size();i++) { //循环执行
					 sock = (socket) elementAt(i);//获取第i个套接字
					 try {
						 // 获取第i个套接字输出流
						 writer = new PrintWriter(sock.getOutputStream(),true);
						 
					 } catch(IOException ie){}
					 
					 //使用第i个套接字输出流,输出msg
					 if(write != 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 + -