手撸实现UDP和TCP通信

网络 网络管理
UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java.net包下提供了两个类DatagramPacket和DatagramSocket来实现UDP通信。

[[336022]]

UDP

UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java.net包下提供了两个类DatagramPacket和DatagramSocket来实现UDP通信。这两个类可以这样理解,DatagramSocket是路,DatagramPacket路上装有人的车。也就是DatagramSocket决定了通信目标,DatagramPacket则代表封装好的数据。

UDP的特性决定了UDP协议的应用场景,在我身边最常见的应用场景就是物联网设备与服务端的通信。

UDPClient实现

  1. public class UDPClient { 
  2.     public static void main(String[] args) throws Exception { 
  3.            byte[] data = "我是客户端,我发送了一条消息".getBytes(); 
  4.         InetAddress address = InetAddress.getByName("localhost"); 
  5.         DatagramPacket packet = new DatagramPacket(data,data.length,address,8888); 
  6.         DatagramSocket socket = new DatagramSocket(); 
  7.         socket.send(packet); 
  8.  
  9.         byte[] message = new byte[1024]; 
  10.         DatagramPacket packet1 = new DatagramPacket(message,message.length); 
  11.         socket.receive(packet1); 
  12.         String replyContent = new String(message,0,message.length); 
  13.         System.out.println("UDPClient 接收到了消息:"+replyContent); 
  14.         socket.close(); 
  15.     } 

UDPServer实现

  1. public class UDPServer { 
  2.     public static void main(String[] args) throws Exception { 
  3.          DatagramSocket socket = new DatagramSocket(8888); 
  4.         byte[] data = new byte[1024]; 
  5.         DatagramPacket packet = new DatagramPacket(data,data.length); 
  6.         socket.receive(packet); 
  7.         String message = new String(data,0,packet.getLength()); 
  8.         System.out.println("UDPServer 接收到了消息:"+message); 
  9.  
  10.         InetAddress address = packet.getAddress(); 
  11.         int port = packet.getPort(); 
  12.         byte[] replyContent = "我是服务端,我回复了一条消息".getBytes(); 
  13.         DatagramPacket packet1 = new DatagramPacket(replyContent, replyContent.length, address, port); 
  14.         socket.send(packet1); 
  15.         socket.close(); 
  16.     } 

TCP

TCP是一种面向连接的服务,经过三次握手建立连接,通过传输字节流的方式进行通信。因此可以保证消息的完整性。同样,在java.net包下也提供了两个包Socket和ServerSocket来实现TCP通信。

TCPClient

  1. public class TCPClient { 
  2.  
  3.     public static void main(String[] args) throws Exception { 
  4.  
  5.         Socket socket = new Socket("localhost",8081); 
  6.         DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
  7.         String data = "我是客户端,我发了一条消息"
  8.         out.writeUTF(data); 
  9.  
  10.         DataInputStream in = new DataInputStream(socket.getInputStream()); 
  11.         String message = in.readUTF(); 
  12.         System.out.println("TCPClient:"+message); 
  13.         socket.close(); 
  14.     } 

TCPServer

  1. public class TCPServer { 
  2.  
  3.     public static void main(String[] args) throws Exception{ 
  4.         ServerSocket serverSocket = new ServerSocket(8081); 
  5.         Socket socket = serverSocket.accept(); 
  6.         DataInputStream in = new DataInputStream(socket.getInputStream()); 
  7.         String message = in.readUTF(); 
  8.         System.out.println("TCPServer:"+message); 
  9.  
  10.         DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
  11.         out.writeUTF("我是服务器,我回复了一条消息"); 
  12.         socket.close(); 
  13.         serverSocket.close(); 
  14.     } 

本文转载自微信公众号「Java旅途」,可以通过以下二维码关注。转载本文请联系Java旅途公众号。

 

责任编辑:武晓燕 来源: Java旅途
相关推荐

2010-09-06 09:43:46

TCPUDPAndroid

2010-06-09 11:38:37

传输层通信协议

2019-12-31 20:41:39

IPUDPTCP

2022-09-02 12:13:22

TCPUDP场景

2020-07-28 08:38:10

TCPUDP协议

2010-06-09 14:36:44

TCP与UDP协议

2010-07-06 15:50:12

TCP和UDP协议

2013-05-27 10:48:16

TCPUDP传输协议

2018-09-06 10:48:51

TCPUDP协议

2020-12-04 06:35:20

TCPUDP阿里

2010-06-09 14:42:21

UDP协议TCP协议

2019-04-16 09:27:46

2020-09-23 09:24:01

堆栈开发实现

2023-10-24 15:22:09

TCPUDP

2019-03-26 14:07:39

TCPUDPDNS

2022-09-21 11:54:22

TCPUDP协议

2014-12-03 14:05:01

TCPUDP

2020-01-13 10:16:53

TCPUDP协议

2020-04-01 15:30:19

TCPUDP服务器

2010-07-07 10:45:22

TCP UDP协议
点赞
收藏

51CTO技术栈公众号