/**
 * 服务器类
 * @author Administrator
 *
 */
public class ChatServer {

private ServerSocket server;
/**
 * 存放连接到服务器的客户
 */
private List<ClientThread> clients; public ChatServer() {
try {
server = new ServerSocket(12321);
clients = new ArrayList<ClientThread>(); } catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
ChatServer server = new ChatServer();
server.start();
} /**
 * 开启服务 循环监听
 * 有客户连接到服务器就创建对象添加到集合里面
 */
public void start() {
try {
while (true) {
Socket socket = server.accept();
ClientThread clientThread = new ClientThread(socket, this);
clients.add(clientThread);
new Thread(clientThread).start();
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
 * 给集合里面的所有客户发送信息
 * @param message
 */
public void sendToAll(String message) {
for (ClientThread clientThread : clients) {
clientThread.send(message);
}
}
}import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;/**
 * 客户线程类
 * 存放客户的socket 输入输出流
 * @author Administrator
 *
 */
public class ClientThread implements Runnable {
private ChatServer server;
private Socket socket;
private BufferedReader br;
private PrintWriter pw; public ClientThread(Socket client, ChatServer server) { this.socket = client;
this.server = server;
try {
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
} /**
 * 向服务端发送信息
 * @param message
 */
public void send(String message) {
pw.println(message);
} /**
 * 只要有客户端发送信息
 * 就转发给所有人
 */
public void run() {
String message = null;
try {
while ((message = br.readLine()) != null) {
server.sendToAll(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}/**
 * 客户端类
 * @author Administrator
 *
 */
public class ChatClient {
private Socket socket;
private BufferedReader br;
private PrintWriter pw; public ChatClient() {
try {
this.socket = new Socket("127.0.0.1", 12321);
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
 * 向服务端发送信息
 * @param message
 */
public void send(String message) {
pw.println(message);
} /**
 * 创建一个线程循环着从服务端读取信息
 */
public void get() {
new Thread() {
public void run() {
try {
String message = br.readLine();
while (message != null) {
System.out.println(message);
message = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
} public static void main(String[] args) {
ChatClient client = new ChatClient();
client.get();
//循环着向服务端发送信息
while (true) {
String message = new Scanner(System.in).next();
client.send(message);
}
}
}

解决方案 »

  1.   

     /**
         * 给集合里面的所有客户发送信息
         * @param message
         */
        public void sendToAll(String message) {
            for (ClientThread clientThread : clients) {
                clientThread.send(message);
            }
        }
    那个服务器向所有用户发送信息时调用,调用的好像是客户端的发送线程把
    信息发送给server了,
      

  2.   

    谢谢帮助 不是那个问题 
    问题是我在创建PrintWriter的时候少new了个OutputStreamWriter