@ElektrodaBot - chciałbym sprawdzać, czy drukarki sieciowe zdefiniowane na komputerze (system Linux) są dostępne. Polecenie "lpstat -v" podaje np.
device for <nazwa-drukarki>: ipp://<IP-drukarki>/ipp/print
i wtedy można sprawdzić, czy można się połączyć z portem ipp (631) na <IP-drukarki>.
Oprócz "ipp" na początku linku widuję: ipps (chyba ten sam port), socket (wtedy port jest zawsze jawnie podany, zwykle to jest 9100), dnssd, impilcitclass - dla tych dwóch ostatnich nie wiem, jak można sprawdzać możliwość połączenia z drukarką.
Osobna sprawa, to jak sprawdzać możliwość połączenia. Próbowałem w językach Tcl i Python.
W Tcl-u jest operacja "socket -async IP port", po niej można skonfigurować akcję do wykonania, gdy pojawi się możliwość pisania na socket, i to oznacza, że albo jest połączenie, albo wystąpił błąd (połączenie zostało odrzucone), więc trzeba wtedy sprawdzać, czy socket ma informację o błędzie - jeśli nie ma, to faktycznie jest połączenie; i czekając na tę możliwość pisania trzeba ograniczać czas.
W Python-ie: użyć socket.socket() do utworzenia socket-u, wykonać na nim setblocking(False), i connect_ex((IP, port)); następnie przez select.select() zaczekać (z ograniczeniem czasu) na możliwość czytania lub pisania - przy połączeniu jest informacja o możliwości pisania, przy odrzuceniu połączenia - czytania i pisania, ale wtedy wypada jeszcze sprawdzić, bo jeśli po połączeniu serwer szybko coś wyśle, to select.select() mógłby zwrócić to samo - i do tego można wykonać getpeername() - daje wyjątek (dlatego trzeba użyć "try" i "except"), gdy nie ma połączenia.
Nie wiem, czy to są najlepsze sposoby, może jest znany jakiś prostszy, bądź pewniejszy.
A może w Linux-ie jest gotowy program do sprawdzania łączności z drukarkami sieciowymi?
"lpstat" może podać informację, czy aktualnie są zadania dla drukarki, czy właśnie jest próba przesyłania jakiegoś, czy drukarka została ustawiona na stan "disabled" z powodu błędu; ale nie widzę, by miał opcję sprawdzania łączności.
device for <nazwa-drukarki>: ipp://<IP-drukarki>/ipp/print
i wtedy można sprawdzić, czy można się połączyć z portem ipp (631) na <IP-drukarki>.
Oprócz "ipp" na początku linku widuję: ipps (chyba ten sam port), socket (wtedy port jest zawsze jawnie podany, zwykle to jest 9100), dnssd, impilcitclass - dla tych dwóch ostatnich nie wiem, jak można sprawdzać możliwość połączenia z drukarką.
Osobna sprawa, to jak sprawdzać możliwość połączenia. Próbowałem w językach Tcl i Python.
W Tcl-u jest operacja "socket -async IP port", po niej można skonfigurować akcję do wykonania, gdy pojawi się możliwość pisania na socket, i to oznacza, że albo jest połączenie, albo wystąpił błąd (połączenie zostało odrzucone), więc trzeba wtedy sprawdzać, czy socket ma informację o błędzie - jeśli nie ma, to faktycznie jest połączenie; i czekając na tę możliwość pisania trzeba ograniczać czas.
W Python-ie: użyć socket.socket() do utworzenia socket-u, wykonać na nim setblocking(False), i connect_ex((IP, port)); następnie przez select.select() zaczekać (z ograniczeniem czasu) na możliwość czytania lub pisania - przy połączeniu jest informacja o możliwości pisania, przy odrzuceniu połączenia - czytania i pisania, ale wtedy wypada jeszcze sprawdzić, bo jeśli po połączeniu serwer szybko coś wyśle, to select.select() mógłby zwrócić to samo - i do tego można wykonać getpeername() - daje wyjątek (dlatego trzeba użyć "try" i "except"), gdy nie ma połączenia.
Nie wiem, czy to są najlepsze sposoby, może jest znany jakiś prostszy, bądź pewniejszy.
A może w Linux-ie jest gotowy program do sprawdzania łączności z drukarkami sieciowymi?
"lpstat" może podać informację, czy aktualnie są zadania dla drukarki, czy właśnie jest próba przesyłania jakiegoś, czy drukarka została ustawiona na stan "disabled" z powodu błędu; ale nie widzę, by miał opcję sprawdzania łączności.