首先是服务端:Server.java
package chat;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
/*
* 运行在服务端的ServerSocket主要负责:
* 1.向系统申请服务端口。客户端就是通过这个端口与之连接的。
*
* 2.监听申请的服务端口。当一个客户端通过该端口尝试建立连接时
* ServerSocket会在服务端创建一个Socket与客户端建立连接。
*/
private ServerSocket server;
/*
* 保存所有客户端输出流的集合。
*/
private List<PrintWriter> allOut;
/*
* 用于初始化服务端
*/
public Server() throws Exception{
/*
* 初始化的同时申请服务端口。
*/
server = new ServerSocket(8088);
allOut = new ArrayList<PrintWriter>();
}
/**
* 将给定的输出流存入共享集合。
* @param out
*/
private void addOut(PrintWriter out){
allOut.add(out);
}
/**
* 将给定的输出流从共享集合中删除。
* @param out
*/
private void removeOut(PrintWriter out){
allOut.remove(out);
}
/**
* 将给定的消息发送给所有客户端。
* @param message
*/
private void sendMessage(String message){
for(PrintWriter out:allOut){
out.println(message);
}
}
/*
* 服务端开始工作的方法
*/
public void start(){
try{
/*
* ServerSocket的accept方法是一个阻塞方法
* 作用是监听服务端口,直到一个客户端连接并创建一
* 个Socket,使用该Socket即可与刚连接的客户
* 端进行交互与数据传输。
*/
while(true){
System.out.<