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

📄 chatserver.java

📁 一个用Swing写的
💻 JAVA
字号:
/**
 * ClassName: ChatServer.java
 * Author: qiujy
 * CreateTime: 2008-7-28
 * EMAIL: qjyong@gmail.com
 * Copyright 2008 ++YONG All rights reserved.
 */
package com.bjjava.chat;

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;

/**
 * 聊天程序服务器端
 * @author qiujy
 * 
 */
public class ChatServer {
	//所以己连接上服务器的Socket集
	private List<SOCKET> sockets = new ArrayList<SOCKET>();

	public static void main(String[] args) {
		ChatServer server = new ChatServer();
		server.start();
	}
	//启动服务器
	public void start() {
		ServerSocket ss = null;
		try {
			ss = new ServerSocket(8888);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("服务器已启动......");
		while (true) {
			try {
				Socket socket = ss.accept();
				sockets.add(socket);
				System.out.println("有一客户端连上来了。。。");
				//启动一个线程专门来跟这个客户端通信
				Thread t = new Thread(new ChatServerRunner(socket, sockets));
				t.start();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

//和客户端通信的线程
class ChatServerRunner implements Runnable {
	private List<SOCKET> sockets;
	private Socket currentSocket;
	private BufferedReader in;

	public ChatServerRunner(Socket currentSocket, List<SOCKET> sockets) {
		this.sockets = sockets;
		this.currentSocket = currentSocket;
	}

	@Override
	public void run() {
		String address = currentSocket.getInetAddress().getHostAddress() + ":" +
							currentSocket.getPort();
		try {
			in = new BufferedReader(new InputStreamReader(currentSocket
					.getInputStream()));
			
			//循环获取客户端发送过来的信息,向每个客户端都转发一遍。。
			while (true) {
				String text = in.readLine();
				if(text == null){
					break;
				}
				System.out.println(address + "-" + text);
				
				for(Socket temp : sockets){
					PrintWriter out = new PrintWriter(temp.getOutputStream());
					out.println(text);
					out.flush();
				}
			}
		} catch (IOException e) {
			System.out.println(address+"客户端走了");
			//e.printStackTrace();
		} finally {
			sockets.remove(currentSocket);
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

⌨️ 快捷键说明

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