创建套接字

  1. ServerSocket serverSocket = new ServerSocket(9688);

9688是服务端需要监听的端口号

监听

  1. serverSocket.accept();

等待客户端的连接,这个方法是一直阻塞的,知道客户端连接上来,建立一个长连接,连接一直维护致一端断开连接

完整的服务端代码

  1. package io.bio;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. /**
  10. * 服务端代码
  11. *
  12. * @author linguo
  13. *
  14. */
  15. public class ServerSocketDemo {
  16. /**
  17. * 处理连接
  18. *
  19. * @param socket
  20. * @throws Exception
  21. */
  22. private static void process(Socket socket) throws Exception {
  23. // 读io
  24. BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  25. // 写io
  26. BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
  27. // 读取
  28. String readLine = reader.readLine();
  29. // 读取到的内容写给客户端
  30. writer.write(readLine);
  31. writer.newLine();
  32. writer.flush();
  33. }
  34. public static void main(String[] args) throws IOException {
  35. // 创建套接字
  36. ServerSocket serverSocket = new ServerSocket(9688);
  37. while (true) {
  38. // 循环监听
  39. Socket clientSocket = serverSocket.accept();
  40. try {
  41. System.err.println("新连接:" + clientSocket.getRemoteSocketAddress());
  42. process(clientSocket);
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. serverSocket.close();
  46. }
  47. }
  48. }
  49. }