一、原理
1.利用DatagramPacket封装数据包;
2.利用DatagramSocket发送数据包;
3.利用DatagramSocket接收数据包;
4.利用DatagramPacket处理数据包。
二、步骤
1.发送数据包
a.使用DatagramSocket()创建一个数据包套接字;
b.使用DatagramPacket(byte[] infos, int offset, int length, InetAddress address, port)创建要发送的数据包;
c.使用DataSocket类的send()方法发送数据包。
2.接收数据包
a.使用DatagramSocket(int port)创建数据包套接字,绑定到指定端口;
b.使用DatagramPacket(byte[] infos, int length)创建字节数组接收数据包;
c.使用DatagramSocket类的receive()方法接收UDP包。
代码示例:
客户端(发送数据包)
package com.yh.mySocketUDP; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class LoginClient { public static void main(String[] args) { // TODO Auto-generated method stub String info = "基于UDP协议的的Socket网络编程"; byte[] infos = info.getBytes(); try { // 创建数据包套接字 DatagramSocket ds = new DatagramSocket(); // 构建数据包对象 InetAddress is = InetAddress.getByName("localhost"); DatagramPacket dp = new DatagramPacket(infos,0,infos.length,is,5000); // 发送数据包 ds.send(dp); ds.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
服务器(接收数据包)
package com.yh.mySocketUDP; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class LoginServer { public static void main(String[] args) { // TODO Auto-generated method stub try { // 创建数据包套接字 DatagramSocket ds = new DatagramSocket(5000); // 创建字节数组接收数据包套接字 byte[] infos = new byte[1024]; DatagramPacket dp = new DatagramPacket(infos,infos.length); // 接收UDP包,放在dp中 ds.receive(dp); String info = new String(dp.getData(),0,dp.getData().length); System.out.println(info); ds.close(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }