UDP广播通信

本文介绍了一个用于发送广播信号并从本地设备获取IPv4地址的Java程序。该程序能够通过UDP协议向局域网内的所有设备发送消息,并等待特定端口的响应。此外,还提供了一个用于获取当前设备连接到WiFi网络时的IPv4地址的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package wifi;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 发送广播信号
 * @author 13509
 *
 */
public class SendBroadcast {
	/**
	 * 
	 * @return "1" 表示——》"回复超时!"
	 * "0" 表示——》"无WiFi连接"
	 * 接收信息
	 */
	public static String send() {
		//本地IPV4地址
		String localhostIp = new IPv4().wifiIPV4();
		//广播地址
		String netAddress = "255.255.255.255";
		//下位机监听的端口号
		final int PORT_NUM = 8888;
		//下位机监听的端口号
		final int PORT_Localhost = 2222;
		//数据包通讯端
		DatagramSocket datagramSocket = null;
		//数据报包
		DatagramPacket datagramPacket = null;
		
		/*** 发送数据 ***/
		// 初始化datagramSocket,判断是否联网,联网执行下面操作
		if(!localhostIp.equals("0")) {
			//获取发送的数据
			String sendStr = "Hello!My girlfriend!";
			
			try {
				//给数据包通讯端绑定本地IP跟端口号
				datagramSocket = new DatagramSocket(PORT_Localhost,InetAddress.getByName(localhostIp));
			} catch (SocketException | UnknownHostException e3) {
				e3.printStackTrace();
			}
		
		//数据转换
		byte[] buf = sendStr.getBytes();
		InetAddress address;
		try {
			address = InetAddress.getByName(netAddress);
			/*
			 *  使用DatagramPacket(byte buf[], int length, InetAddress address, int port)
			 *  函数组装发送UDP数据报
			 *  address:接收数据的地址,我们现在用广播地址
			 *  PORT_NUM:下位机监听的端口
			 */
			datagramPacket = new DatagramPacket(buf, buf.length, address, PORT_NUM);
		} catch (UnknownHostException e2) {

		}

		// 发送数据
		try {
			datagramSocket.send(datagramPacket);
		} catch (IOException e1) {

		}

		/*** 接收数据 ***/
		byte[] receBuf = new byte[1024];
		 
		/**建一个用来接收的数据报*/
		DatagramPacket recePacket = new DatagramPacket(receBuf, receBuf.length);

		try {
			//设置接收超时时间
			datagramSocket.setSoTimeout(1000);
			//接收数据
			datagramSocket.receive(recePacket);
		} catch (SocketException e) {
			return "1";
		} catch (IOException e) {
			return "1";
		}finally {
			//资源关闭
			datagramSocket.close();
		}
//		接收的数据
		String receStr = new String(recePacket.getData(), 0, recePacket.getLength());
		return receStr;
		}else {
			return "0";
		}
	

	}
	
}

获取本地ipv4地址

package wifi;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class IPv4 {
	public static String ip4;
	/**
	 * 
	 * @return 0代表没有连接WiFi 其余返回IPV4地址
	 */
	public String wifiIPV4() {

		Enumeration allNetInterfaces = null;
		try {
			allNetInterfaces = NetworkInterface.getNetworkInterfaces();
		} catch (SocketException e) {
			e.printStackTrace();
		}
		InetAddress ip = null;
		while (allNetInterfaces.hasMoreElements()) {
			NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
			// System.out.println(netInterface.getName());
			Enumeration addresses = netInterface.getInetAddresses();
			while (addresses.hasMoreElements()) {
				ip = (InetAddress) addresses.nextElement();
				if (ip != null && ip instanceof Inet4Address) {
					if (!ip.getHostAddress().equals("127.0.0.1")) {
						System.out.println(ip.getHostAddress());
						ip4=ip.getHostAddress();
						return ip.getHostAddress();
					}

				}
			}
		}
		return "0";
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值