什么是 TCP Socket 和 UDP Socket?代码举例讲解

TCP Socket 和 UDP Socket 是两种基于 IP 协议的网络编程接口。它们都可以用于网络应用程序之间的通信,但有以下主要区别:
TCP Socket:

  • 面向连接的通信,需要建立连接后才能通信
  • 提供可靠的字节流服务,通过序号和确认机制实现数据无误差、无重复、无丢失传输
  • 通信速度相对较慢

示例:

// 服务器
ServerSocket server = new ServerSocket(8000); 
Socket socket = server.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();

// 客户端
Socket socket = new Socket("127.0.0.1", 8000);
InputStream in = socket.getInputStream(); 
OutputStream out = socket.getOutputStream();
UDP Socket:
  • 无连接的通信,直接可以通信
  • 提供不可靠的报文服务,可能出现数据丢失、重复、乱序等情况
  • 通信速度相对较快

示例:

// 发送方
DatagramSocket socket = new DatagramSocket();
byte[] data = "Hello".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, 
    InetAddress.getByName("127.0.0.1"), 8000);
socket.send(packet);

// 接收方 
DatagramSocket socket = new DatagramSocket(8000);
byte[] buffer = new byte[100];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet); 
String text = new String(packet.getData(), 0, packet.getLength()); 

总之,TCP Socket 适用于要求可靠传输的场景,如文件传输、网页访问等;UDP Socket 适用于要求高效但可以容忍一定数据丢失的场景,如视频通话、网络游戏等。