socket的概念和用法详解

开发中会用到数据通信,包括发送和接收数据,今天我们就来聊聊怎么使用socket发送和接收数据。

Socket的概念

Socket(套接字)是网络通信的基础,它是一个抽象的概念,用于描述一个网络连接的端点。在TCP/IP网络中,一个Socket由一个IP地址和一个端口号唯一标识。Socket允许不同主机上的进程进行通信,它们可以发送和接收数据。

Socket的分类

  1. 流式Socket(Stream Sockets)
  2. 基于TCP协议,提供可靠的、面向连接的通信。
  3. 数据传输保证顺序和完整性。
  4. 数据报Socket(Datagram Sockets)
  5. 基于UDP协议,提供无连接的服务。
  6. 数据传输不保证顺序和完整性,但可能更快。

Socket通信过程

  1. 服务器监听(Listen)
  2. 服务器Socket绑定到一个端口号,并监听客户端的连接请求。
  3. 客户端连接(Connect)
  4. 客户端Socket指定服务器的IP地址和端口号,发起连接请求。
  5. 三次握手(Three-way Handshake)
  6. TCP连接建立的过程,确保双方都能发送和接收数据。
  7. 数据传输(Data Transfer)
  8. 一旦连接建立,客户端和服务器就可以通过Socket进行数据传输。
  9. 连接终止(Close)
  10. 数据传输完成后,通过四次挥手(Four-way Wavehand)过程关闭连接。

Socket的用法详解

服务器端Socket编程

  1. 创建Socket: ServerSocket serverSocket = new ServerSocket(portNumber);
  2. 监听连接: Socket clientSocket = serverSocket.accept();
  3. 输入输出流: InputStream input = clientSocket.getInputStream();
    OutputStream output = clientSocket.getOutputStream();
  4. 读取数据: byte[] buffer = new byte[1024];
    int bytesRead = input.read(buffer);
    String message = new String(buffer, 0, bytesRead);
  5. 发送数据: String response = "Hello from Server";
    output.write(response.getBytes());
  6. 关闭连接: clientSocket.close();
    serverSocket.close();

客户端Socket编程

  1. 创建Socket: Socket socket = new Socket(serverAddress, portNumber);
  2. 输入输出流: OutputStream output = socket.getOutputStream();
    InputStream input = socket.getInputStream();
  3. 发送数据: String message = "Hello from Client";
    output.write(message.getBytes());
  4. 读取数据: byte[] buffer = new byte[1024];
    int bytesRead = input.read(buffer);
    String response = new String(buffer, 0, bytesRead);
  5. 关闭连接: socket.close();

注意事项

  • 异常处理:Socket编程中需要处理各种网络异常,如连接超时、断开连接等。
  • 资源管理:确保在finally块中关闭Socket和流,以释放资源。
  • 安全性:对于敏感数据,使用SSL/TLS等加密协议来保护数据传输的安全。
  • 性能优化:对于高并发场景,考虑使用非阻塞IO(NIO)或异步IO(AIO)。

创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。

原文链接:,转发请注明来源!