《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();
	}
}

此时在发送端电脑发送数据,其他两台电脑均收到了输入的数据。


你可能感兴趣的:(java,socket,网络编程,JavaSE,UDP)