import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
private Socket socket;
public Client() throws Exception {
System.out.println("正在连接服务器。。。。。。。");
socket = new Socket("127.0.0.1", 8888);
System.out.println("客户端"+socket.getLocalPort()+"连接服务器" + socket.getPort() + "完成");
}
public void start() throws Exception {
try {
ServerReader reader = new ServerReader();
Thread t = new Thread(reader);
t.start();
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8");
PrintWriter pw = new PrintWriter(osw, true);
Scanner sc = new Scanner(System.in);
while (true) {
String message = sc.nextLine();
pw.println(message);
}
} catch (Exception e) {
System.out.println("客户端运行失败");
throw e;
}
}
public static void main(String[] args) {
try {
Client client = new Client();
client.start();
} catch (Exception e) {
System.out.println("客户端运行失败");
e.printStackTrace();
}
}
class ServerReader implements Runnable {
@Override
public void run() {
try {
InputStream in = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(in, "utf-8");
BufferedReader br = new BufferedReader(isr);
String message = null;
while ((message = br.readLine()) != null) {
System.out.println(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
private ServerSocket server;
private ArrayList<PrintWriter> allOut;
private synchronized void addOut(PrintWriter out) {
allOut.add(out);
}
private synchronized void removeOut(PrintWriter out) {
allOut.remove(out);
}
private synchronized void sendMessage(String message) {
for (PrintWriter out : allOut) {
out.println(message);
}
}
public Server() throws IOException {
server = new ServerSocket(8888);
allOut = new ArrayList<PrintWriter>();
}
public void start() throws IOException {
System.out.println("等待客户端连接。。。。");
while (true) {
Socket socket = server.accept();
System.out.println("客户端" + socket.getPort() + "连接");
ClientReader reader = new ClientReader(socket);
Thread t = new Thread(reader);
t.start();
}
}
public static void main(String[] args) throws IOException {
Server server = new Server();
server.start();
}
class ClientReader implements Runnable {
private Socket socket;
private String host;
public ClientReader(Socket socket) {
this.socket = socket;
InetAddress address = socket.getInetAddress();
host = address.getHostAddress();
System.out.println("host" + host + " port:" + socket.getPort());
}
@Override
public void run() {
PrintWriter pw = null;
try {
sendMessage("[" + host + "]" + socket.getLocalPort() + "上线了");
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8");
pw = new PrintWriter(osw, true);
addOut(pw);
System.out.println("添加完成");
sendMessage("当前在线人数[" + allOut.size() + "]");
InputStream in = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(in, "utf-8");
BufferedReader br = new BufferedReader(isr);
String message = null;
while ((message = br.readLine()) != null) {
sendMessage(socket.getLocalPort() + "说:" + message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
removeOut(pw);
sendMessage("[" + host + socket.getLocalPort() + "]" + "下线了");
sendMessage("当前剩余在线人数【" + allOut.size() + "】");
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}