当前位置:   article > 正文

Socket如何实现客户端和服务器间的通信

Socket如何实现客户端和服务器间的通信

Socket 是实现网络通信的一种机制,它允许在不同主机之间的进程通过网络进行数据交换。下面我将简要介绍如何使用 Socket 实现客户端和服务器间的通信。

客户端-服务器通信步骤:

服务器端:

创建服务器端 Socket

  • 服务器端通过创建一个 ServerSocket 对象来监听指定的端口,等待客户端连接。

ServerSocket serverSocket = new ServerSocket(portNumber);

其中 portNumber 是服务器端监听的端口号。

接受客户端连接

  • 一旦有客户端连接,ServerSocket 就会返回一个 Socket 对象,该对象代表了和客户端的通信通道。

Socket clientSocket = serverSocket.accept();

这一步是阻塞操作,直到有客户端连接进来才会继续执行。

获取输入输出流

  • 通过 Socket 对象,可以获取输入流和输出流,进行数据的读写操作。

  1. InputStream inputStream = clientSocket.getInputStream();
  2. OutputStream outputStream = clientSocket.getOutputStream();

处理客户端请求

  • 在获得了输入流之后,可以从中读取客户端发送的数据,并根据协议进行相应的处理。

关闭连接

  • 处理完毕后,记得关闭 SocketServerSocket,释放资源。

  1. clientSocket.close();
  2. serverSocket.close();
客户端:

创建客户端 Socket

  • 客户端通过创建一个 Socket 对象来连接到服务器的指定地址和端口。

Socket socket = new Socket(serverAddress, portNumber);

其中 serverAddress 是服务器的地址,portNumber 是服务器端监听的端口号。

获取输入输出流

  • 通过 Socket 对象,可以获取输入流和输出流,进行数据的读写操作。

  1. InputStream inputStream = socket.getInputStream();
  2. OutputStream outputStream = socket.getOutputStream();

发送请求和接收响应

  • 使用输出流向服务器发送数据,使用输入流从服务器接收数据。

关闭连接

  • 处理完毕后,记得关闭 Socket,释放资源。

socket.close();

示例代码:

服务器端代码:
  1. import java.io.*;
  2. import java.net.*;
  3. public class Server {
  4.   public static void main(String[] args) {
  5.       int portNumber = 8088;
  6.       try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
  7.           System.out.println("Server listening on port " + portNumber);
  8.            
  9.           while (true) {
  10.               Socket clientSocket = serverSocket.accept();
  11.               System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());
  12.               // 获取输入流
  13.               InputStream inputStream = clientSocket.getInputStream();
  14.               BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  15.                
  16.               // 读取客户端发送的数据
  17.               String clientMessage = reader.readLine();
  18.               System.out.println("Received from client: " + clientMessage);
  19.                
  20.               // 获取输出流
  21.               OutputStream outputStream = clientSocket.getOutputStream();
  22.               PrintWriter writer = new PrintWriter(outputStream, true);
  23.                
  24.               // 发送响应给客户端
  25.               writer.println("Message received successfully!");
  26.                
  27.               // 关闭连接
  28.               clientSocket.close();
  29.           }
  30.       } catch (IOException e) {
  31.           e.printStackTrace();
  32.       }
  33.   }
  34. }
客户端代码:
  1. import java.io.*;
  2. import java.net.*;
  3. public class Client {
  4.   public static void main(String[] args) {
  5.       String serverAddress = "127.0.0.1";
  6.       int portNumber = 12345;
  7.       try (Socket socket = new Socket(serverAddress, portNumber)) {
  8.           System.out.println("Connected to server at " + serverAddress + ":" + portNumber);
  9.            
  10.           // 获取输出流
  11.           OutputStream outputStream = socket.getOutputStream();
  12.           PrintWriter writer = new PrintWriter(outputStream, true);
  13.            
  14.           // 发送数据给服务器
  15.           writer.println("Hello from client!");
  16.            
  17.           // 获取输入流
  18.           InputStream inputStream = socket.getInputStream();
  19.           BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  20.            
  21.           // 读取服务器响应
  22.           String serverResponse = reader.readLine();
  23.           System.out.println("Server response: " + serverResponse);
  24.            
  25.       } catch (IOException e) {
  26.           e.printStackTrace();
  27.       }
  28.   }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/939554
推荐阅读
相关标签
  

闽ICP备14008679号