Server.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
private ServerSocket ss;
private Socket socket;
private List<Socket> list = new ArrayList<Socket>();
public Server() {
try {
ss = new ServerSocket(10000);
while (true) {
socket = ss.accept();
list.add(socket);
System.out.println("在线人数:" + list.size());
new Thread(new ChatThread(socket, list)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server();
}
class ChatThread implements Runnable{
private Socket socket;
private List<Socket> socketList;
private BufferedReader bufferedReader;
public ChatThread(Socket socket, List<Socket> socketList) {
super();
this.socket = socket;
this.socketList = socketList;
}
private void preRun(){
InputStreamReader r=null;
try {
r = new InputStreamReader(this.socket.getInputStream());
this.bufferedReader=new BufferedReader(r);
} catch (IOException e) {
e.printStackTrace();
}
}
private PrintWriter getSocketPrintWriter(Socket socket){
OutputStream os=null;
try {
os = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
return new PrintWriter(bw, true);
}
private void broadcast(String msg){
for(Socket s : socketList){
PrintWriter pw=this.getSocketPrintWriter(s);
pw.println(msg);
}
}
@Override
public void run() {
String msg="";
this.preRun();
while(true){
try {
msg="from client: "+this.bufferedReader.readLine();
System.out.println(msg);
this.broadcast(msg);
} catch (IOException e) {
try {
this.bufferedReader.close();
this.socket.close();
this.socketList.remove(this.socket);
this.broadcast("somebody exist....people size :" +socketList.size());
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return ;
}
}
}
}
}
Client.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client() {
try {
socket = new Socket("127.0.0.1", 10000);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
new Thread(){
public void run(){
try {
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(), true);
String str = null;
while((str= line.readLine()) != null){
out.println(str);
}
line.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
out.close();
}
}
}.start();
new Thread(){
public void run(){
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = null;
while((str = in.readLine()) != null){
System.out.println("receive from server:" + str);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
public static void main(String[] args) {
new Client();
}
}