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

时间:2014-04-11 10:19:34

标签: android networking printing android-wifi android-networking

目标 - 我需要在wifi上检测我的Brother QL-720NW标签打印机,以便从我的应用程序进行打印。

我在Get the IP address of printerHow to connect a network printer over Android?How to get IP adress of other hosts in same wifi network in android?等方面经历了各种类似的问题

但以上都没有完全解决我的问题。

  

使用此   How to get IP address of the device from code?   我能够获得wifi网络上所有IP地址的列表。

CODE:

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 :(得分:0)

如果您想要维护静态IP地址,可能需要在打印机中进行设置。在关闭它之后有一个机会,如果你使用DHCP,它将被分配一个新的IP。一旦它是静态的,您可以在应用程序中对其进行编码或将其置于设置中。这样你就不需要搜索ip地址了。

答案 1 :(得分:0)

好Rachita,我会添加(在添加到列表之前)通过Socket连接的代码并在端口9100上测试寻找打印机。 Here is an example。希望有所帮助