我正在爲我的Android
電話製作客戶端服務器應用程序。Android廣播地址
我在Python
中創建了一個UDP
服務器,它位於並監聽連接。
我可以把服務器IP
地址直接放入,就像192.169.0.100
一樣,它發送的數據正常。我也可以在192.168.0.255
,它找到192.169.0.100
服務器。
是否可以獲取我的Android手機所連接的網絡的廣播地址?我只會在我的Wifi
網絡或其他Wifi
網絡上使用此應用程序。
乾杯
我正在爲我的Android
電話製作客戶端服務器應用程序。Android廣播地址
我在Python
中創建了一個UDP
服務器,它位於並監聽連接。
我可以把服務器IP
地址直接放入,就像192.169.0.100
一樣,它發送的數據正常。我也可以在192.168.0.255
,它找到192.169.0.100
服務器。
是否可以獲取我的Android手機所連接的網絡的廣播地址?我只會在我的Wifi
網絡或其他Wifi
網絡上使用此應用程序。
乾杯
隨着廣播IP地址是當前IP地址,但隨着255後,用戶可以做這樣的事情:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {}
return null;
}
public static String getBroadcast() throws SocketException {
System.setProperty("java.net.preferIPv4Stack", "true");
for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements();) {
NetworkInterface ni = niEnum.nextElement();
if (!ni.isLoopback()) {
for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
return interfaceAddress.getBroadcast().toString().substring(1);
}
}
}
return null;
}
這裏有一個方法,應該工作:
public static String getBroadcast(){
String found_bcast_address=null;
System.setProperty("java.net.preferIPv4Stack", "true");
try
{
Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
while (niEnum.hasMoreElements())
{
NetworkInterface ni = niEnum.nextElement();
if(!ni.isLoopback()){
for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses())
{
found_bcast_address = interfaceAddress.getBroadcast().toString();
found_bcast_address = found_bcast_address.substring(1);
}
}
}
}
catch (SocketException e)
{
e.printStackTrace();
}
return found_bcast_address;
}
從
private InetAddress getBroadcastAddress() throws IOException {
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
// handle null somehow
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
quads[k] = (byte) (broadcast >> (k * 8));
return InetAddress.getByAddress(quads);
}
這樣做的好處是隻看WIFI。我知道OP說:「我只會在我的Wifi網絡或其他Wifi網絡上使用此應用程序。」但值得一提的是,如果其他人需要非WiFi替代方案。
和...不要忘記您的清單許可人員!
也許更簡單的方法...
public static String getBroadcast() throws Exception {
System.setProperty("java.net.preferIPv4Stack", "true");
InetAddress inet = InetAddress.getLocalHost();
NetworkInterface net = NetworkInterface.getByInetAddress(inet);
InterfaceAddress [] interfaceAddresses = net.getInterfaceAddresses().toArray(new InterfaceAddress[0]);
if (interfaceAddresses.length > 0) {
return interfaceAddresses[0].getBroadcast().toString().substring(1);
} else {
return "255.255.255";
}
}
這使得(可能是不必要的)假設子網掩碼爲255.255.255.255。實際上你應該獲得與你檢索的地址相關的網絡掩碼,然後計算'bcast = ipAddress | 〜netmask' – hobbs 2010-06-08 00:41:41
我在想,你會如何實現這樣的事情?歡呼 – RailsSon 2010-06-08 09:13:14
「由於廣播IP地址是當前IP地址,但以25結束」......不。一個典型的家庭網絡有一個.255的bcast addr,但通常情況並非如此。 – 2011-11-11 22:16:39