mirror of https://github.com/noisymime/Arduino.git
Zeroconf services may have multiple IP addresses: let's consider them all
This commit is contained in:
parent
e6b11c44f6
commit
652168cb03
|
@ -33,7 +33,8 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||
Iterator<BoardPort> iterator = ports.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
try {
|
||||
if (!NetUtils.isReachable(InetAddress.getByName(iterator.next().getAddress()))) {
|
||||
BoardPort board = iterator.next();
|
||||
if (!NetUtils.isReachable(InetAddress.getByName(board.getAddress()), Integer.parseInt(board.getPrefs().get("port")))) {
|
||||
iterator.remove();
|
||||
}
|
||||
} catch (UnknownHostException e) {
|
||||
|
@ -93,7 +94,8 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||
@Override
|
||||
public void serviceResolved(ServiceEvent serviceEvent) {
|
||||
ServiceInfo info = serviceEvent.getInfo();
|
||||
String address = info.getInet4Addresses()[0].getHostAddress();
|
||||
for (InetAddress inetAddress : info.getInet4Addresses()) {
|
||||
String address = inetAddress.getHostAddress();
|
||||
String name = serviceEvent.getName();
|
||||
|
||||
PreferencesMap prefs = null;
|
||||
|
@ -105,6 +107,8 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||
prefs.put("distro_version", info.getPropertyString("distro_version"));
|
||||
}
|
||||
|
||||
prefs.put("port", "" + info.getPort());
|
||||
|
||||
String label = name + " at " + address;
|
||||
if (board != null) {
|
||||
String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board);
|
||||
|
@ -123,6 +127,7 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||
ports.add(port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDuplicateBoards(BoardPort newBoard) {
|
||||
Iterator<BoardPort> iterator = ports.iterator();
|
||||
|
|
|
@ -7,11 +7,11 @@ import java.net.Socket;
|
|||
|
||||
public abstract class NetUtils {
|
||||
|
||||
public static boolean isReachable(InetAddress address) {
|
||||
public static boolean isReachable(InetAddress address, int port) {
|
||||
Socket socket = null;
|
||||
try {
|
||||
socket = new Socket();
|
||||
socket.connect(new InetSocketAddress(address, 80), 100);
|
||||
socket.connect(new InetSocketAddress(address, port), 100);
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue