Mar*_*nnj 12 java networking interface adapter ssid
我们正在做的一个项目,在Java中(编译为JRE 1.6)编码,并需要一些帮助一点点,但显然复杂功能:我们想要做某个动作时,一个特定的无线网络连接,例如当连接的SSID =="myNetworkAtHome "或类似的.
在浏览了这个网站之后,谷歌和Java文档我们已经走得更近了.看完这里的代码后:http: //download.oracle.com/javase/tutorial/networking/nifs/retrieving.html
看起来我们越来越近但是它遇到了一个deadend,所有接口似乎都连接到"net0"到"net13"(在我的笔记本电脑上).而且我们无法从任何界面获取SSID .我确实意识到示例中的代码仅提供接口名称而不是连接的网络,但它似乎没有提供获取连接的网络信息的方法.
任何有关这方面的帮助都非常有帮助!
关心Martin NJ
Dav*_*eto 18
您无法在Java中访问网络的这种低级细节.您可以通过NetworkInterface该类获取网络接口的一些详细信息,但是如果您看到所提供的方法,则没有人与Wifi网络相关,也没有提供任何方式来获取SSID.如下所述,您应该通过使用JNI调用本机库或使用调用OS工具来使用某些本机功能Runtime.
Java不是为了做那种事情而设计的,难以以独立于平台的方式实现,并且原则上不能用Java管理任何硬件级细节.
同样适用于3G,GPRS等其他网络......应用程序不应该知道连接类型及其细节.Java只能管理传输(TCP)级别的内容,而不能管理网络(IP)而非链接(3G,Wifi,以太网......),因此您只能管理套接字.
ArrayList<String>ssids=new ArrayList<String>();
ArrayList<String>signals=new ArrayList<String>();
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "netsh wlan show all");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (r.read()!=-1) {
line = r.readLine();
if (line.contains("SSID")||line.contains("Signal")){
if(!line.contains("BSSID"))
if(line.contains("SSID")&&!line.contains("name")&&!line.contains("SSIDs"))
{
line=line.substring(8);
ssids.add(line);
}
if(line.contains("Signal"))
{
line=line.substring(30);
signals.add(line);
}
if(signals.size()==7)
{
break;
}
}
}
for (int i=0;i<ssids.size();i++)
{
System.out.println("SSID name == "+ssids.get(i)+" and its signal == "+signals.get(i) );
}
Run Code Online (Sandbox Code Playgroud)