java socket实现多客户端群聊

来源:互联网 发布:淘宝小女孩布鞋 编辑:程序博客网 时间:2024/05/24 04:55

服务器端主要是接收客户端发送过来的信息,并将该信息发给所有的客户端
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<Socket> socketList;private int count;public Chat(int count, Socket socket, List<Socket> 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<Socket> socketList = new ArrayList<Socket>();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();}}

0 0