用下面这句先创建一个socket来指引数据的去向,这个里面的参数“8888”表示的不是发送目的地主机的端口,而是发送起点的端口,表示从这个主机的8888端口发出去的。
DatagramSocket ds = new DatagramSocket(8888);然后再用下面这句将数据内容,发送的目的地都封装到这么一个数据包里面,里面的参数buf表示字节数组,必须是字节数组,不能是字符串数组,buf.length无疑是传输的长度, InetAddress.getByName("127.255.25.1")是目的地的主机地址,这句的含义是通过ip地址获取主机地址,10000表示目的地接收这个数据的端口,这个端口要保证没有被其他应用占用。
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.255.25.1"), 10000);最后调用send函数即可完成发送
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UdpSend { public static void main(String[] args) throws IOException, IOException { System.out.println("udp 发送端 run"); /** * 通过查阅文档,了解到用于UDP传输协议的对象是DatagramSocket * * 通过UDP协议发送一段文本数据 * 思路: * 1、需要先建立UDP的socket。它具备发送和接收功能 * 2、将数据封装到数据包中。数据包对象是DatagramPacket * 3、使用socket对象的send方法将数据包发送出去 * 4、关闭资源 * */ //1、需要先建立UDP的socket。它具备发送和接收功能 DatagramSocket ds = new DatagramSocket(8888); //2、将数据封装到数据包中。数据包对象是DatagramPacket String text = "hello udp来了!"; byte[] buf = text.getBytes(); //将数据转成字节数组 //将字节数组封装到数据包中 DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.255.25.1"), 10000); //3、使用socket对象的send方法将数据包发送出去 ds.send(dp); //4、关闭资源 ds.close(); } }发送键盘输入的数据,这里其实就是加了键盘录入,IO流的操作
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UdpSend2 { public static void main(String[] args) throws IOException, IOException { System.out.println("udp 发送端 run"); /** * 通过查阅文档,了解到用于UDP传输协议的对象是DatagramSocket * * 通过UDP协议发送一段文本数据 思路: * 1、需要先建立UDP的socket。它具备发送和接收功能 * 2、将数据封装到数据包中。数据包对象是DatagramPacket * 3、使用socket对象的send方法将数据包发送出去 * 4、关闭资源 */ // 1、需要先建立UDP的socket。它具备发送和接收功能 DatagramSocket ds = new DatagramSocket(9999); // 2、将数据封装到数据包中。数据包对象是DatagramPacket。数据来自于键盘录入 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while ((line = bufr.readLine()) != null) { if("over".equals(line)) break; byte[] buf = line.getBytes(); // 将数据转成字节数组 // 将字节数组封装到数据包中 DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.255.25.1"), 10000); ds.send(dp); } // 4、关闭资源 ds.close(); } } 成功示例:发送前
从键盘录入发送内容
接收端