《java入门第一季》之UDP协议下的网络编程小案例
需求,一台电脑发送数据,其他电脑都可以收到该数据。使用广播地址。
发送端:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InterfaceAddress; /* * 数据来自于键盘录入 * 键盘录入数据要自己控制录入结束。 */ public class SendDemo { public static void main(String[] args) throws IOException { // 创建发送端的Socket对象 DatagramSocket ds = new DatagramSocket(); // 封装键盘录入数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//封装输入功能 String line = null; while ((line = br.readLine()) != null) {//line是输入的数据 if ("886".equals(line)) {//结束条件 break; } // 创建数据并打包 byte[] bys = line.getBytes(); // DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.12.92"), 12345); // DatagramPacket dp = new DatagramPacket(bys, bys.length, // InetAddress.getByName("192.168.1.103"), 12345);//因为发送端给定IP,所以只能打给103这个人,不能发给别人。为了演示发给多个人看下一节代码 //这里的IP是目的地址的IP。 //为了让所有人(只要是在这个局域网之内的人)接收端都能收到信息,发送端写广播地址192.168.1.255 DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.1.255"),12345); // 发送数据 ds.send(dp); } // 释放资源 ds.close(); } }
接收端我又开了两台电脑同样的程序。代码如下:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /* * 多次启动接收端: * java.net.BindException: Address already in use: Cannot bind * 端口被占用。 */ public class ReceiveDemo { public static void main(String[] args) throws IOException { // 创建接收端的Socket对象,要给出一个要接收的端口号 DatagramSocket ds = new DatagramSocket(12345); while (true) {//代表接收多次 // 创建一个包裹 byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys, bys.length); // 接收数据 ds.receive(dp);//把接收到的数据存放到了dp里面 // 解析数据 String ip = dp.getAddress().getHostAddress(); //String s = new String(dp.getData(), 0, dp.getLength()); String s = new String(bys,0,dp.getLength());//dp.getLength()实际发送的字节有多大 System.out.println("from " + ip + " data is : " + s); } // 释放资源 // 接收端应该一直开着等待接收数据,是不需要关闭 // ds.close(); } }
此时在发送端电脑发送数据,其他两台电脑均收到了输入的数据。