我的工作是为零售环境的网络摄像机开发软件.我的团队正在开发的软件之一就是Web服务器,它检索由相机本身(具有自己的嵌入式Web服务器)以HTML格式生成并存储在相机中的各种报告.然后,我们的软件将从摄像机获取这些报告,并将其存储在中央Web服务器上.
在将摄像机的IP很好地插入到我们的软件中的同时,我正在开发一个简单的Java类,该类将查询网络并找到网络上的所有摄像机.
但是问题是,尽管它可以在我的PC和同事的PC上正常运行,但是当我们尝试在将托管我们软件的实际Web服务器PC上运行它时,它却在运行,但是说子网中的每个IP都处于脱机状态/网关IP不可访问.
例如,如果在插入封闭的LAN时从我的PC或同事PC上运行它,则会得到以下活动IP,并带有一个标志,告诉我它是否为摄像机.
(网关是192.168.0.1,子网掩码是255.255.255.0,这意味着要查找的256个设备的全部范围)
IP:/192.168.0.1 Active:true Camera:false
IP:/192.168.0.100 Active:true Camera:true
IP:/192.168.0.101 Active:true Camera:true
IP:/192.168.0.103 Active:true Camera:false
IP:/192.168.0.104 Active:true Camera:false
但是由于某种原因,当使用相同的JRE从Web服务器PC运行相同的程序时,我只会得到以下内容
IP:/192.168.0.1 Active:true Camera:false
现在,我的代码不是在主线程上按顺序枚举每个IP,而是为要检查的每个IP创建一个单独的线程并同时运行它们(否则,枚举整个IP范围将花费大约21分钟的时间.超时时间为5000毫秒/ IP).然后,主线程每隔15秒钟反复运行这些IP扫描线程.
我检查了所有线程在所有PC上的运行是否都已完成,没有异常