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";
}
}