下面是一段基于 BIO 模型实现的简单 Socket 编程
服务端
package cn.inetty.java;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class iServer {private static ExecutorService executorService =Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);public static void main(String[] args) {ServerSocket serverSocket = null;try {serverSocket = new ServerSocket();serverSocket.bind(new InetSocketAddress(8888));System.out.println("serverSocket:"+serverSocket);// while (true) {// new Thread(new ServerTask(serverSocket.accept())).start();// }// 使用线程池来创建线程while (true) {executorService.execute(new ServerTask(serverSocket.accept()));}} catch (IOException e) {e.printStackTrace();}}private static class ServerTask implements Runnable {private Socket socket = null;public ServerTask(Socket socket) {this.socket = socket;}@Overridepublic void run() {// 需要注意 ObjectOutputStream和ObjectInputStream 在服务端创建顺序和客户端创建顺序问题try (ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());){String name = inputStream.readUTF();System.out.println("Accept Client Message = "+name);outputStream.writeUTF("Hello "+name);outputStream.flush();} catch (IOException e) {try {socket.close();} catch (IOException ioException) {ioException.printStackTrace();}e.printStackTrace();}}}}
客户端
package cn.inetty.java;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetSocketAddress;import java.net.Socket;public class iClient {public static void main(String[] args) throws IOException {Socket socket = null;ObjectInputStream inputStream = null;ObjectOutputStream outputStream = null;try {socket = new Socket();socket.connect(new InetSocketAddress("localhost", 8888));outputStream = new ObjectOutputStream(socket.getOutputStream());inputStream = new ObjectInputStream(socket.getInputStream());System.out.println(socket);String name = "ming";outputStream.writeUTF(name);outputStream.flush();System.out.println("Client Send Message = " + name);System.out.println("From Server Message = " + inputStream.readUTF());} catch (IOException e) {try {inputStream.close();outputStream.close();socket.close();} catch (IOException ioException) {ioException.printStackTrace();}e.printStackTrace();}}}
