Socket实现客户端和服务端
客户端
public class Client { public static void main(String[] args) { // 服务端地址和端口 final String DEFAULT_SERVER_HOST = "127.0.0.1"; final Integer DEFAULT_SERVER_PORT = 8888; Socket socket = null; try { // 创建socket socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT); // 接收消息 BufferedReader buffReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 发送消息 BufferedWriter buffWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String msg = null; // 获取用户输入的消息 BufferedReader userReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { String input = userReader.readLine(); // 写入客户端要发送的消息。因为服务端用readLine获取消息,其以\n为终点,所以要在消息最后加上\n buffWriter.write(input + "\n"); // 刷新缓存 buffWriter.flush(); // 读取服务端信息 msg = buffReader.readLine(); System.out.println(msg); // 如果客户端输入quit就可以跳出循环、断开连接了 if (input.equals("quit")) { break; } } socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
服务端
public class Server { public static void main(String[] args) { // 监听8888端口 final int DEFAULT_PORT = 8888; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(DEFAULT_PORT); while (true) { // 阻塞监听 Socket socket = serverSocket.accept(); System.out.println("Client[" + socket.getPort() + "]Online"); // 读取消息 BufferedReader buffReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 发送消息 BufferedWriter buffWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String msg = null; while ((msg = buffReader.readLine()) != null) { System.out.println("Client[" + socket.getPort() + "]:" + msg); // 写入服务端要发送的消息 buffWriter.write("Server:" + msg + "\n"); buffWriter.flush(); if (msg.equals("quit")) { System.out.println("Client[" + socket.getPort() + "]:Offline"); break; } } } } catch (IOException e) { e.printStackTrace(); } } }