When I try to read the object properties from the IP address, I am getting Unable to find router to network 50001
please help me.

I am using Bacnet4j 3.2.4.4 library.

Here is the Code:
import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.RemoteDevice;
import com.serotonin.bacnet4j.RemoteObject;
import com.serotonin.bacnet4j.ServiceFuture;
import com.serotonin.bacnet4j.event.DeviceEventAdapter;
import com.serotonin.bacnet4j.exception.BACnetException;
import com.serotonin.bacnet4j.exception.ErrorAPDUException;
import com.serotonin.bacnet4j.npdu.ip.IpNetwork;
import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyAck;
import com.serotonin.bacnet4j.service.acknowledgement.ReadPropertyMultipleAck;
import com.serotonin.bacnet4j.service.confirmed.*;
import com.serotonin.bacnet4j.service.unconfirmed.WhoIsRequest;
import com.serotonin.bacnet4j.transport.DefaultTransport;
import com.serotonin.bacnet4j.transport.Transport;
import com.serotonin.bacnet4j.type.constructed.ReadAccessResult;
import com.serotonin.bacnet4j.type.constructed.ReadAccessSpecification;
import com.serotonin.bacnet4j.type.constructed.SequenceOf;
import com.serotonin.bacnet4j.type.enumerated.ObjectType;
import com.serotonin.bacnet4j.type.enumerated.PropertyIdentifier;
import com.serotonin.bacnet4j.type.enumerated.Segmentation;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.Real;
import com.serotonin.bacnet4j.util.DiscoveryUtils;

import java.util.ArrayList;
import java.util.List;

public class Bacnet_4_j_test2 {

/**

  • @param args the command line arguments
    */
    public static void main(String[] args) throws Exception {
    IpNetwork network = new IpNetwork("172.16.60.195", IpNetwork.DEFAULT_PORT);
    Transport transport = new DefaultTransport(network);
    transport.setTimeout(500000);
    transport.setSegTimeout(15000);
    final LocalDevice localDevice = new LocalDevice(5001, transport);

localDevice.getEventHandler().addListener(new DeviceEventAdapter() {
public void iAmReceived(RemoteDevice device) {
// System.out.println("Discovered device " + 1001);
localDevice.addRemoteDevice(device);
final RemoteDevice remoteDevice = localDevice.getRemoteDevice(device.getAddress());
// System.out.println("hi:"+remoteDevice.getInstanceNumber());

remoteDevice.setSegmentationSupported(Segmentation.segmentedBoth);
remoteDevice.setSegmentationSupported(Segmentation.noSegmentation);
remoteDevice.setSegmentationSupported(Segmentation.segmentedReceive);
remoteDevice.setSegmentationSupported(Segmentation.segmentedTransmit);
remoteDevice.setSegmentationSupported(Segmentation.ALL[3]);
device.setMaxAPDULengthAccepted(100);

// System.out.println("Hi:"+remoteDevice.getSegmentationSupported());

new Thread(new Runnable() {
@Override
public void run() {
try {
try {
DiscoveryUtils.getExtendedDeviceInformation(localDevice, remoteDevice);
} catch (BACnetException e) {
e.printStackTrace();
}
System.out.println(remoteDevice.getName() + " " + remoteDevice.getVendorName() + " " + remoteDevice.getModelName() + " " + remoteDevice.getAddress() + " " + remoteDevice.getProtocolRevision() + " " + remoteDevice.getProtocolVersion());

ReadPropertyAck ack = localDevice.send(remoteDevice, new ReadPropertyRequest(remoteDevice.getObjectIdentifier(), PropertyIdentifier.objectList)).get();
SequenceOf<ObjectIdentifier> value = (SequenceOf<ObjectIdentifier>) ack.getValue();

for (ObjectIdentifier id : value) {

List<ReadAccessSpecification> specs = new ArrayList<ReadAccessSpecification>();
specs.add(new ReadAccessSpecification(id, PropertyIdentifier.presentValue));
//specs.add(new ReadAccessSpecification(id, PropertyIdentifier.units));
specs.add(new ReadAccessSpecification(id, PropertyIdentifier.objectName));
//specs.add(new ReadAccessSpecification(id, PropertyIdentifier.description));
//specs.add(new ReadAccessSpecification(id, PropertyIdentifier.objectType));
//specs.add(new ReadAccessSpecification(id, PropertyIdentifier.eventType));

ReadPropertyMultipleRequest multipleRequest = new ReadPropertyMultipleRequest(new SequenceOf<ReadAccessSpecification>(specs));

ReadPropertyMultipleAck send = localDevice.send(remoteDevice, multipleRequest).get();
SequenceOf<ReadAccessResult> readAccessResults = send.getListOfReadAccessResults();

System.out.print(id.getInstanceNumber() + " " + id.getObjectType() + ", ");
for (ReadAccessResult result : readAccessResults) {
for (ReadAccessResult.Result r : result.getListOfResults()) {
System.out.print(r.getReadResult() + ", ");
if(r.getReadResult().toString().contains("T")){

}

}
}
System.out.println();
}

ObjectIdentifier mode = new ObjectIdentifier(ObjectType.analogValue, 11);

ServiceFuture send = localDevice.send(remoteDevice, new WritePropertyRequest(mode, PropertyIdentifier.presentValue, null, new Real(2), null));
System.out.println(send.getClass());
System.out.println(send.get().getClass());

} catch (ErrorAPDUException e) {
System.out.println("Could not read value " + e.getApdu().getError() + " " + e);
} catch (BACnetException e) {
e.printStackTrace();
}

}
}).start();
}

@Override
public void iHaveReceived(RemoteDevice device, RemoteObject object) {
System.out.println("Value reported " + device + " " + object);
}
});

localDevice.initialize();
localDevice.sendGlobalBroadcast(new WhoIsRequest());
Thread.sleep(60000);

List<RemoteDevice> remoteDevices = localDevice.getRemoteDevices();
for (RemoteDevice device : remoteDevices) {
System.out.println("Remote dev " + device);
}

System.in.read();
localDevice.terminate();
}

}