Найдите IP-адрес принтера из списка IP-адресов сетевых устройств.

Цель. Мне нужно обнаружить мой принтер этикеток Brother QL-720NW в сети Wi-Fi, чтобы печатать из моего приложения.

Я задавал различные похожие вопросы на SO, такие как Получить IP-адрес принтера , Как подключить сетевой принтер через Android? ,Как получить IP-адрес других хостов в той же сети Wi-Fi в Android? и т. д.

Но ни один из вышеперечисленных не решает мою проблему полностью.

Используя этот Как получить IP-адрес устройства из кода? Я могу получить список всех IP-адресов в моей сети Wi-Fi.

КОД:

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-адресов??

Пожалуйста помоги.


person Rachita Nanda    schedule 11.04.2014    source источник


Ответы (2)


Возможно, вы захотите настроить его на принтере, если хотите поддерживать статический IP-адрес. Есть вероятность, что после выключения и повторного включения ему будет назначен новый IP-адрес, если вы используете DHCP. Как только он станет статичным, вы можете просто закодировать его в приложении или поместить в настройку. Таким образом, вам никогда не придется искать IP-адреса.

person Glenn    schedule 13.05.2015

Ну, Рачита, я бы добавил (непосредственно перед добавлением в список) код для подключения через сокет и проверки на порту 9100 в поисках принтера. Вот пример. надеюсь, это поможет

person darkangelo    schedule 22.09.2015