永发信息网

如何用Java实现快速扫描当前局域网中的网络设备

答案:1  悬赏:60  手机版
解决时间 2021-04-06 06:38
  • 提问者网友:像風在裏
  • 2021-04-06 01:10
如何用Java实现快速扫描当前局域网中的网络设备
最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-04-06 02:27
在局域网环境中,首先需要解决下面两个问题:
1.局域网中任意一台计算机可以建立游戏服务器
2.局域网中的计算机可以寻找服务器,而不是玩家手工设置服务器的IP地址
建立服务器其实很简单,只要生成一个ServerSocketChannel,并且让其Socket监听自己挑选的一个计算机网络端口做为游戏服务器连接专用口即可.
建立并监听端口的程序代码如下:
public static final int PORT = 10997;
private ServerSocketChannel ssChannel;
-----------------------------------------------------------------
ssChannel = ServerSocketChannel.open();
ssChannel.configureBlocking(false);
ServerSocket ssocket = ssChannel.socket();
InetAddress iaddr = InetAddress.getLocalHost();
ssocket.bind(new InetSocketAddress(iaddr,PORT));
上面代码完成简单的初始化,并将ServerSocket绑定到本机的PORT端口.
客户机要连过来比较周折,因为不知道哪一台机器会成为服务器,所以需要扫描本网所有机器的PORT端口.
因此:
得到本机的IP地址,然后分析一下自己的机器在什么类型的网络中,程序中只简单处理了C类型的网络,我让程序从*.*.*.0开始一至扫描到255,得到所有可以连通的机器的IP地址.关于测试服务器PORT端口是否游戏服务器占用的代码没有给出,本文只观注扫描局域网内计算机的小方法.
扫描源程序完整如下:
import java.net.InetAddress;

public class Searcher {


public static void main(String[] args) {
// TODO Auto-generated method stub
try {
InetAddress addr = InetAddress.getLocalHost();
byte[] addrs = addr.getAddress();
System.out.println(addr.getHostName());
for (int i = 0; i < addrs.length; i++) {
System.out.print((addrs[i] & 0xFF) + ".");
}

if ((addrs[0] & 0x80) == 0)
System.out.println("the ip class is A");
else if ((addrs[0] & 0xC0) == 0x80)
System.out.println("The ip class is B");
else if ((addrs[0] & 0xE0) == 0xC0){
System.out.println("The ip class is C");
addrs[3] = 0;
for(int i=0;i<256;i++){
InetAddress n = InetAddress.getByAddress(addrs);
if(n.isReachable(5)){
System.out.println(n);
}
addrs[3]++;
}
}
else if ((addrs[0] & 0xF0) == 0xE0)
System.out.println("The ip class is D");
else if ((addrs[0] & 0xF8) == 0xF0)
System.out.println("The ip class is E");

} catch (Exception e) {
// TODO: handle exception

}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯