从网络设备的IP地址列表中查找打印机的IP地址

3

目标- 我需要通过wifi检测我的Brother QL-720NW标签打印机,以便从我的应用程序中打印。

我已经查看了各种类似的问题,比如 获取打印机的IP地址如何在Android上连接网络打印机?如何在android中获取同一wifi网络中其他主机的IP地址?等等。

但是以上所有问题都不能完全解决我的问题。

使用这个如何从代码中获取设备的IP地址?,我能够获取到我的wifi网络上所有IP地址的列表。

代码:

String myIpAdd= getIPAddress(true);
ArrayList<InetAddress>  inetAddresses=getConnectedDevices(myIpAdd);

public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) {
        ArrayList<InetAddress> ret = new ArrayList<InetAddress>();

        LoopCurrentIP = 0;

        String IPAddress = "";
        String[] myIPArray = YourPhoneIPAddress.split("\\.");
        InetAddress currentPingAddr;

        for (int i = 0; i <= 255; i++) {
            try {

                // build the next IP address
                currentPingAddr = InetAddress.getByName(myIPArray[0] + "." +
                        myIPArray[1] + "." +
                        myIPArray[2] + "." +
                        Integer.toString(LoopCurrentIP));

                // 50ms Timeout for the "ping"
                if (currentPingAddr.isReachable(50)) {

                    ret.add(currentPingAddr);
                }
            } catch (UnknownHostException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            LoopCurrentIP++;
        }
        return ret;
    }

     /**
     * Get IP address from first non-localhost interface
     * @param ipv4  true=return ipv4, false=return ipv6
     * @return  address or empty string
     */
    public static String getIPAddress(boolean useIPv4) {
        try {
            List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface intf : interfaces) {
                List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
                for (InetAddress addr : addrs) {
                    if (!addr.isLoopbackAddress()) {
                        String sAddr = addr.getHostAddress().toUpperCase();
                        boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); 
                        if (useIPv4) {
                            if (isIPv4) 
                                return sAddr;
                        } else {
                            if (!isIPv4) {
                                int delim = sAddr.indexOf('%'); // drop ip6 port suffix
                                return delim<0 ? sAddr : sAddr.substring(0, delim);
                            }
                        }
                    }
                }
            }
        } catch (Exception ex) { 
            ex.printStackTrace();
        } // for now eat exceptions
        return "";
    }

如何从IP地址列表中检测我的打印机的IP地址?
请帮忙。
2个回答

0
嗯,Rachita,我会在添加到列表之前添加一段代码,通过Socket连接并测试9100端口以查找打印机。这里有一个例子。希望能帮到你。

0

如果你想要保持一个静态IP地址,你可能需要在打印机中进行设置。如果你使用的是DHCP,关闭并重新启动后可能会被分配一个新的IP地址。一旦设置为静态IP地址,你可以在应用程序中对其进行编码,或者将其放入设置中。这样,你就再也不需要搜索IP地址了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接