Java网络通信编程-UDP
1.对于TCP和UDP主要是两种不同的协议,前者是“面向连接”,“安全可靠”,“不限制大小,大数据传输”,‘效率低’,后者是“面向无连接”,“速度快”,“不安全,不可靠”,“限制大小在64K”,“效率高”。
2.端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口。
3.使用UDP主要涉及的对象有DatagramSocket,DatagramPacket,InetAddress。下面是UDP案例,代码如下:
client端:
package com.net; import java.io.IOException; import java.net.*; /** UDP通信-client * Created by lichangyun on 2020/7/17. */ public class UdpClient { public static void main(String[] args) throws SocketException, UnknownHostException { // 创建DatagramSocket DatagramSocket ds=new DatagramSocket(); // 创建DatagramPacket,打包 String msg="我爱编程!"; byte[] bytes = msg.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port=1000; DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port); try { // 建立联系 ds.send(dp); } catch (IOException e) { e.printStackTrace(); }finally { ds.close(); } } }
server端:
package com.net; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /**UDP-server * Created by lichangyun on 2020/7/20. */ public class UdpServer { public static void main(String[] args) throws IOException { // 创建服务端对象 DatagramSocket ds= new DatagramSocket(1000); // 创建包 byte[] bytes = new byte[1024]; DatagramPacket dp = new DatagramPacket(bytes, bytes.length); // 接受客户端的数据 ds.receive(dp); // 打印到控制台 System.out.println("接受到的数据: "+new String(bytes,0,bytes.length)); // 释放资源 ds.close(); } }
下面来看看组播的代码实现,组播地址:224.0.0.0.-239.255.255.255,其中224.0.0.0.-224.0.0.255为预留的组播地址。涉及到组播的客户端步骤如下:
1.创建发送端DatagramSocket对象
2.创建数据,并把数据打包(DatagramPacket )
3.调用DatagramSocket对象的方法发送数据(在组播中这里指定的是组播的地址)
4.释放资源
客户端代码如下:
package com.net; import java.io.IOException; import java.net.*; /** * Created by lichangyun on 2020/7/21. */ public class UdpZbClient { public static void main(String[] args) throws IOException { DatagramSocket ds = new DatagramSocket(); String msg="hello 组播"; byte[] bytes = msg.getBytes(); int length = bytes.length; InetAddress address = InetAddress.getByName("224.0.1.0"); int port=10000; DatagramPacket dp = new DatagramPacket(bytes, length, address, port); ds.send(dp); ds.close(); } }
涉及到组播的服务端步骤如下:
1.创建客户端MulticastSocket对象
2.创建DatagramPacket对象,用于接收数据
3.调用MulticastSocket对象的接受方法,与DatagramPacket建立联系
4.解析数据包
5.释放资源
服务端代码如下:
package com.net; import java.io.IOException; import java.net.*; /** * Created by lichangyun on 2020/7/21. */ public class UdpZbServer { public static void main(String[] args) throws IOException { // 组播对象 MulticastSocket ms = new MulticastSocket(10000); byte[] bytes = new byte[1024]; int length = bytes.length; InetAddress address = InetAddress.getByName("224.0.1.0"); DatagramPacket dp = new DatagramPacket(bytes, length); ms.joinGroup(address); ms.receive(dp); byte[] data = dp.getData(); int length1 = dp.getLength(); System.out.println("组播接受到的数据: "+new String(data,0,length1)); ms.close(); } }
今天要比昨天好