java socket实现多客户端群聊
发布日期:2021-06-30 18:38:57 浏览次数:2 分类:技术文章

本文共 4215 字,大约阅读时间需要 14 分钟。

服务器端主要是接收客户端发送过来的信息,并将该信息发给所有的客户端

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;/** * 	 */class Chat extends Thread {	private Socket socket;	private List
socketList; private int count; public Chat(int count, Socket socket, List
socketList) { this.count = count; this.socket = socket; this.socketList = socketList; } public void run() { BufferedReader reader = null; PrintWriter writer = null; try { reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); String message = null; while (true) { message = reader.readLine(); // 接收到客户端的bye信息,客户端即将退出,并将bye写入到该客户端 if (message.equals("bye")) { writer = new PrintWriter(socket.getOutputStream()); writer.println("bye"); writer.flush(); continue; } // 向所有的客户端发送接收到信息,实现群聊 for (int i = 0; i < socketList.size(); i++) { writer = new PrintWriter(socketList.get(i) .getOutputStream()); writer.println(count + " say: " + message); writer.flush(); } } } catch (IOException e) { e.printStackTrace(); } }}public class ChatServer { /** * Description * * @param args */ public void startWork() throws IOException { ServerSocket serverSocket = new ServerSocket(2345); List
socketList = new ArrayList
(); Socket socket = null; int count = 0; while (true) { socket = serverSocket.accept(); count++; System.out.println(count + " clinet connected to the server!"); // 将每一个连接到该服务器的客户端,加到List中 socketList.add(socket); // 每一个连接到服务器的客户端,服务器开启一个新的线程来处理 new Chat(count, socket, socketList).start(); } } /** * Description * * @param args * @throws IOException */ public static void main(String[] args) throws IOException { ChatServer chatServer = new ChatServer(); chatServer.startWork(); }}
客户端主要是两个类,一个是接收服务器端发送过来的信息,一个是向服务器发送客户端输入的信息

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;/** * 接受服务器信息 */class ReadMes extends Thread {	private Socket socket;	public ReadMes(Socket socket) {		this.socket = socket;	}	public void run() {		BufferedReader reader = null;		try {			reader = new BufferedReader(new InputStreamReader(					socket.getInputStream()));			String message = null;			while (true) {				message = reader.readLine();				// 当读服务器信息线程接收到bye,该线程退出				if (message.equals("bye")) {					break;				}				System.out.println(message);			}		} catch (IOException e) {			e.printStackTrace();		} finally {			try {				if (reader != null) {					reader.close();				}			} catch (IOException e) {				e.printStackTrace();			}		}	}}/** *  * 发送信息 */class SendMes extends Thread {	private Socket socket;	public SendMes(Socket socket) {		this.socket = socket;	}	public void run() {		BufferedReader input = null;		PrintWriter writer = null;		try {			input = new BufferedReader(new InputStreamReader(System.in));			writer = new PrintWriter(socket.getOutputStream());			String message = null;			while (true) {				message = input.readLine();				// 当输入bye客户端退出				if (message.equals("bye")) {					break;				}				// 向服务器端发送信息				writer.println(message);				writer.flush();			}		} catch (IOException e) {			e.printStackTrace();		} finally {			if (input != null) {				try {					input.close();				} catch (IOException e) {					e.printStackTrace();				}			}			if (writer != null) {				writer.close();			}		}	}}public class ChatClient {	private String ipAdress;	public ChatClient(String ipAString) {		this.ipAdress = ipAdress;	}	public void startWork() throws UnknownHostException, IOException {		Socket socket = new Socket(ipAdress, 2345);		new ReadMes(socket).start();		new SendMes(socket).start();			}	/**	 * Description	 * 	 * @param args	 * @throws UnknownHostException	 * @throws IOException	 */	public static void main(String[] args) throws UnknownHostException,			IOException {		ChatClient chatClient = new ChatClient(args[0]);		chatClient.startWork();	}}
文章转自:http://www.open-open.com/lib/view/open1335967481983.html

转载地址:https://linqiarui.blog.csdn.net/article/details/51068261 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android--通知之Notification
下一篇:Android总结篇系列:Android广播机制

发表评论

最新留言

不错!
[***.144.177.141]2024年04月29日 22时14分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章