Я работаю на сетевом принтере, используя jmdns для обнаружения принтера, с помощью которого я успешно обнаружил принтер.
public void serviceResolved(ServiceEvent ev) {
// Log.d(TAG, "service resolved: " + ev.getInfo().getName() + ", port: " + ev.getInfo().getPort() + " address: " + ev.getInfo().getInetAddress());
try{
NetworkPrinter printer = new NetworkPrinter(ev.getInfo().getName(), ev.getInfo().getInetAddress());
printers.add(printer);
}catch (Exception ex){}
}
Я добавляю принтер в свой пользовательский класс, класс здесь.
publi c class NetworkPrinter {
private String name;
private InetAddress address;
private int port=9100;
public NetworkPrinter(String name, InetAddress address) {
this.name = name;
this.address = address;
}
public NetworkPrinter(String name, Inet4Address address) {
this.name = name;
this.address = address;
}
public NetworkPrinter(String ipAddress, int port,String name) {
try {
address=InetAddress.getByName(ipAddress);
this.port=port;
this.name=name;
} catch (UnknownHostException e) {
e.printStackTrace();
}
this.address = address;
}
public String getName() {
return name;
}
public int getPortNo() {
return port;
}
public void setName(String name) {
this.name = name;
}
public InetAddress getAddress() {
return address;
}
public void setAddress(Inet4Address address) {
this.address = address;
}
@Override
public boolean equals(Object o) {
if (o instanceof NetworkPrinter) {
NetworkPrinter printer = (NetworkPrinter) o;
if (printer.name.equals(this.name))
return true;
}
return false;
}
}
Теперь, когда я хочу дать команда печати на принтер я выбираю обнаруженный принтер из выпадающего списка, который в свою очередь посылает мне объект InetAddress, через который я получаю адресный объект Ipv6 и получаю ip6address, используя метод getHostaddress ().
if (!isIpv4)
{
if ((address instanceof Inet6Address)) {
try {
IPAddressString str = new IPAddressString(address.getHostAddress());
if (str.isIPv6()) {
String Ip6Address =InetAddress.getByName(address.getHostName()).getHostAddress();
//IpAddress = addr2.toNormalizedString();
portNo = port;
WifiCommunication wfComm=new WifiCommunication( );
wfComm.iniSocket(Ip6Address,portNo)//Socket soc=new Socket() implementation at backend
wfComm.print();
}
} catch (Exception e) {
//e.getMessage provides validation issue
}
// }
}
}
Возвращает IPv6-адрес в этом формате fe80 :: 9a4b: e1ff: fe37: 74c6, но я не могу подключиться к принтеру с помощью сокета с ipv6. Я могу печатать, используя адрес IPv4. Может кто-нибудь, пожалуйста, сообщите мне, как я могу использовать ipv4 и ipv6 с Socket () для связи. Я пробовал много библиотек для извлечения ipv4 из ipv6, но я не могу подключиться к принтеру. была бы признательна за помощь.