UDP
UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java.net包下提供了两个类DatagramPacket和DatagramSocket来实现UDP通信。这两个类可以这样理解,DatagramSocket是路,DatagramPacket路上装有人的车。也就是DatagramSocket决定了通信目标,DatagramPacket则代表封装好的数据。
UDP的特性决定了UDP协议的应用场景,在我身边最常见的应用场景就是物联网设备与服务端的通信。
UDPClient实现
- public class UDPClient {
- public static void main(String[] args) throws Exception {
- byte[] data = "我是客户端,我发送了一条消息".getBytes();
- InetAddress address = InetAddress.getByName("localhost");
- DatagramPacket packet = new DatagramPacket(data,data.length,address,8888);
- DatagramSocket socket = new DatagramSocket();
- socket.send(packet);
- byte[] message = new byte[1024];
- DatagramPacket packet1 = new DatagramPacket(message,message.length);
- socket.receive(packet1);
- String replyContent = new String(message,0,message.length);
- System.out.println("UDPClient 接收到了消息:"+replyContent);
- socket.close();
- }
- }
UDPServer实现
- public class UDPServer {
- public static void main(String[] args) throws Exception {
- DatagramSocket socket = new DatagramSocket(8888);
- byte[] data = new byte[1024];
- DatagramPacket packet = new DatagramPacket(data,data.length);
- socket.receive(packet);
- String message = new String(data,0,packet.getLength());
- System.out.println("UDPServer 接收到了消息:"+message);
- InetAddress address = packet.getAddress();
- int port = packet.getPort();
- byte[] replyContent = "我是服务端,我回复了一条消息".getBytes();
- DatagramPacket packet1 = new DatagramPacket(replyContent, replyContent.length, address, port);
- socket.send(packet1);
- socket.close();
- }
- }
TCP
TCP是一种面向连接的服务,经过三次握手建立连接,通过传输字节流的方式进行通信。因此可以保证消息的完整性。同样,在java.net包下也提供了两个包Socket和ServerSocket来实现TCP通信。
TCPClient
- public class TCPClient {
- public static void main(String[] args) throws Exception {
- Socket socket = new Socket("localhost",8081);
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- String data = "我是客户端,我发了一条消息";
- out.writeUTF(data);
- DataInputStream in = new DataInputStream(socket.getInputStream());
- String message = in.readUTF();
- System.out.println("TCPClient:"+message);
- socket.close();
- }
- }
TCPServer
- public class TCPServer {
- public static void main(String[] args) throws Exception{
- ServerSocket serverSocket = new ServerSocket(8081);
- Socket socket = serverSocket.accept();
- DataInputStream in = new DataInputStream(socket.getInputStream());
- String message = in.readUTF();
- System.out.println("TCPServer:"+message);
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- out.writeUTF("我是服务器,我回复了一条消息");
- socket.close();
- serverSocket.close();
- }
- }
本文转载自微信公众号「Java旅途」,可以通过以下二维码关注。转载本文请联系Java旅途公众号。
【责任编辑: 贺鑫 TEL:(010)68476606】 本文转载自网络,原文链接:...
近日,人力资源和社会保障部发布新职业人工智能工程技术人员就业景气现状分析报...
虽然突如其来的疫情,但这并没有阻挡中国移动快速拓展5G基站的决心。 中国移动总...
据路透社报道,中国的小米、华为、OPPO 和 vivo 正联手打造一个平台,让中国以外...
虽然是周末,但腾讯QQ团队在今天发布了 iPhone版QQ 8.5 ,为iPhone用户也提供了...
有没有想过,多久没发过短信了呢?曾经作为主要通讯方式的短信,在移动互联网兴起...
网络攻击活动如今日益猖獗,以至于组织采用的安全工具很难保护其业务并打击网络...
微信苹果二选一,成为近期网络上热门的话题。 此事件源自最新微信禁令,这让苹果...
人工智能驱动的销售可以解决许多组织无法应对冠状病毒疫情带来的不确定性问题。...
随着近年来人工智能浪潮的兴起,无人驾驶再次成为话题,国内外很多公司投入了自...