/** @param args */ public static void main(final String[] args) { // System.out is the standard output stream of our environment (here, most likely terminal) System.out.println( "This example shows how to establish a KNX connection " + "to a KNXnet/IP server."); try { // KNXNetworkLink is the base interface of a Calimero link to a KNX network. // For all the Calimero interfaces you don't know yet, check the Calimero API // documentation. final KNXNetworkLink knxLink; // We have to provide our own local and remote endpoints to the network link // using an InetSocketAddress, which we create first. This approach is of advantage if // our computer is multi-homed, i.e., has several network interface cards, the default // configuration of local host (via InetAddress.getLocalHost) is not correct or not // desired, or if the KNXnet/IP server (i.e., remote endpoint) uses a non-default port. final InetSocketAddress localEP = new InetSocketAddress(InetAddress.getByName(localHost), 0); // now the remote port final InetSocketAddress remoteEP = new InetSocketAddress(remoteHost, knxServerPort); System.out.println("Try connecting to " + remoteHost + " on port " + knxServerPort + "..."); // Here, we create the IP-based link, which tries to establish a connection to the // remote endpoint in its constructor. // This constructor also allows to specify the service mode of the link, i.e., // KNX tunneling or routing according to the standard, and whether to use NAT-aware // (Network Address Translation) addressing. The last parameter tells our // link that the KNX network is based on twisted-pair medium, with TP1 currently being // the most commonly used one for KNX networks. knxLink = new KNXNetworkLinkIP( KNXNetworkLinkIP.TUNNELING, localEP, remoteEP, false, TPSettings.TP1); System.out.println("Connection to " + remoteHost + " successfully established"); // We always make sure to close the connection after we used it knxLink.close(); System.out.println("Connection got closed"); } catch (final KNXException e) { // All checked Calimero-specific exceptions are subtypes of KNXException System.out.println("Error connecting to " + remoteHost + ": " + e.getMessage()); } catch (final InterruptedException e) { // Longer tasks that might block, like connection procedures, are interruptible, e.g., // by using Ctrl+C from the terminal; in such case, an instance of InterruptedException // is thrown. // If a task got interrupted, Calimero will clean up its internal state and resources. // Any deviation of this behavior (e.g., if not feasible) will be noted in the // Calimero API documentation. System.out.println("Connecting to " + remoteHost + " was interrupted, quit"); } catch (final UnknownHostException e) { System.out.println("Host resolution for local endpoint " + localHost + " failed"); } }