Java 发现本地网络设备&;程序设计
我正在尝试做一个项目,必须使我能够在同一网络中找到本地设备,以及关于它们的IP、mac地址和供应商的信息。到目前为止一切都很好,但问题是,我重申,通过这个代码,它只会发现手机,而不知何故看不到我的笔记本电脑?我测试了这个代码,它只显示我的平板电脑和手机,没有电脑。如果你有任何建议,请现在告诉我。提前谢谢。下面是我的代码Java 发现本地网络设备&;程序设计,java,android,multithreading,networking,ip,Java,Android,Multithreading,Networking,Ip,我正在尝试做一个项目,必须使我能够在同一网络中找到本地设备,以及关于它们的IP、mac地址和供应商的信息。到目前为止一切都很好,但问题是,我重申,通过这个代码,它只会发现手机,而不知何故看不到我的笔记本电脑?我测试了这个代码,它只显示我的平板电脑和手机,没有电脑。如果你有任何建议,请现在告诉我。提前谢谢。下面是我的代码 //This class is my pinger class public class DiscoverRunner implements Runnable { privat
//This class is my pinger class
public class DiscoverRunner implements Runnable {
private List<InetAddress> results;
private String subnet;
private Integer startAdd;
private Integer numAdds;
public DiscoverRunner(String subnet, Integer start, Integer steps) {
this.subnet = subnet;
this.startAdd = start;
this.numAdds = steps;
results = new LinkedList<InetAddress>();
}
@Override
public void run() {
int timeout=4000;
for (int i=startAdd;i<startAdd+numAdds;i++){
String host=subnet +"." + i;
try {
InetAddress a = InetAddress.getByName(host);
if (a.isReachable(timeout)){
results.add(a);
//System.out.println(host + " is reachable");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public List<InetAddress> getResults(){
return results;
}
//这个类是我的pinger类
公共类DiscoveryRunner实现可运行{
私人名单结果;
私有字符串子网;
私有整数startAdd;
私有整数numads;
public DiscoveryRunner(字符串子网、整数开始、整数步数){
this.subnet=子网;
this.startAdd=开始;
this.numAdds=步骤;
结果=新建LinkedList();
}
@凌驾
公开募捐{
int超时=4000;
对于(int i=startAdd;i=4&&ip.equals(拆分为[0])){
//基本健康检查
字符串mac=splitted[3];
如果(mac.matches(“…:”)){
返回mac;
}否则{
返回null;
}
}
}
返回myMacAddress;
}捕获(例外e){
e、 printStackTrace();
}最后{
试一试{
如果(br!=null){
br.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
返回null;
}
公共静态字符串getVendorName(字符串MacAddress)引发IOException{
试一试{
URL=新URL(“http://api.macvendors.com/“+MacAddress);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“POST”);
InputStream in=新的BufferedInputStream(conn.getInputStream());
字符串vendorName=org.apache.commons.io.IOUtils.toString(在“UTF-8”中);
返回供应商名称;
}捕获(格式错误){
返回null;
}捕获(协议例外e){
返回null;
}捕获(IOE异常){
返回null;
}
}
}此ping与您在命令行上所做的一样,也许您可以更改您的编码样式
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("ping 192.168.0.142");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
p.destroy();
break;
}
input.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
正如您在命令行上所做的那样,可能您可以更改您的编码样式
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("ping 192.168.0.142");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
p.destroy();
break;
}
input.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您是否正在访问无线网络?那么可能其他计算机是从LAN连接的,您能检查一下您提供的子网是否封装了LAN子网。@sgpalit是的,我正在访问我家中的接入点(无线适配器)。我的笔记本电脑也在使用wifi进行访问,没有连接以太网。@sgpalit btw,我的笔记本电脑的本地IP是192.168.1.5,正如你从上面看到的,从1到255 ping,我不明白为什么它在这种情况下找不到它可能是你的防火墙阻止了它?@sgpalit bro你是说我自己的笔记本电脑上的防火墙?因为我在家里打开了另一台笔记本电脑,而程序也找不到其他笔记本电脑。你正在无线接入网络吗?那么可能其他计算机是从LAN连接的,您能检查一下您提供的子网是否封装了LAN子网。@sgpalit是的,我正在访问我家中的接入点(无线适配器)。我的笔记本电脑也在使用wifi进行访问,没有连接以太网。@sgpalit btw,我的笔记本电脑的本地IP是192.168.1.5,正如你从上面看到的,从1到255 ping,我不明白为什么它在这种情况下找不到它可能是你的防火墙阻止了它?@sgpalit bro你是说我自己的笔记本电脑上的防火墙?因为我在家里打开了另一台笔记本电脑,而程序也找不到其他笔记本电脑。兄弟,非常感谢你的帮助,但我没有完全明白你的意思?因为ıding在这里分享我的全部代码,以及所有那些回收者视图和类似的东西,所以它是如何完全工作的?当你运行这个程序时,你是否在手机上尝试过,它也找到了你的笔记本电脑?你建议我现在做什么,兄弟?嗨,兄弟,我刚想出一个办法。。我们刚刚把同一个项目下载到我朋友的电脑上,当我们运行它时,它工作得非常好,可以检测到所有东西,但当我们在我的网络笔记本电脑上执行同样的操作时,它就不会出现:D奇怪的a.f:D:))这是个好消息。。。你的代码有效:)也许是时候换你的笔记本了:Pbro非常感谢你的帮助,但我没有完全明白你的意思?因为ıding在这里分享我的全部代码,以及所有那些回收者视图和类似的东西,所以它是如何完全工作的?当你运行这个程序时,你是否在手机上尝试过,它也找到了你的笔记本电脑?你建议我现在做什么,兄弟?嗨,兄弟,我刚想出一个办法。。我们刚刚把同一个项目下载到我朋友的电脑上,当我们运行它时,它工作得非常好,可以检测到所有东西,但当我们在我的网络笔记本电脑上执行同样的操作时,它就不会出现:D奇怪的a.f:D:))这是个好消息。。。你的代码有效:))也许是时候更换你的笔记本电脑了:P