public static void main(String[] args) throws IOException { //1.创建对象 DatagramSocket ds = new DatagramSocket(); //2.准备数据包DatagramPacket对象的参数 //byte[] 数据 getBytes()String类的方法转换为byte[] byte[] bys = "XXX,你7点起床。".getBytes(); //length 数据的长度 int length = bys.length; //InetAddress 发送的主机地址 getByName()里面可以是主机名或者IP地址。 InetAddress host1 = InetAddress.getByName("自己本机的IPV4地址");//例如:192.168.111.211 // InetAddress host2 = InetAddress.getByName("自己的电脑名称");//列如:暴走的独角兽 //port端口 0 - 65535之间建议取8080以上。 int port = 8086; //send需要DatagramPacket对象我们创建 //3.构造方法DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) DatagramPacket dp = new DatagramPacket(bys,length,host1,port); //4.发送数据void send(DatagramPacket p) ds.send(dp); //5.释放资源 ds.close(); }
注释:发送数据和接受数据不能在同一个main方法下,你也可以把这个封装为一个方法。
public static void main(String[] args) throws IOException { //1.创建DatagramSocket对象并指定端口号,与发送端端口号一致。 DatagramSocket ds = new DatagramSocket(8086); //2.创建DatagramPacket(byte[] buf, int length) //byte[] buf byte[] bys = new byte[1024]; //int length int length = bys.length; DatagramPacket dp = new DatagramPacket(bys,length); //3.接收 ds.receive(dp); //4.将内容输出到控制台,为什么使用DatagramPacket?因为数据在它那里。 //getData()获取数据 byte[] data = dp.getData(); //输出在控制台 System.out.println(new String(data)); //这种输出有空格字符怎么办? System.out.println(new String(data,0,dp.getLength())); //这样就能解决,读取0到dp.getLength()的长度字符串。 //5.释放 ds.close(); }