package org.neo4j.onlinebackup; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; public class NeoBackupServer extends Thread { private final int PORT; private volatile boolean run = true; NeoBackupServer( int port ) { super(); this.PORT = port; } @Override public void run() { ServerSocketChannel serverChannel = null; try { serverChannel = ServerSocketChannel.open(); SocketAddress port = new InetSocketAddress( PORT ); serverChannel.socket().bind( port ); System.out.println( "Neo backup server bound to: " + PORT ); } catch ( IOException e ) { System.err.println( "Failed binding server socket on Neo backup " + "server, " + e.getMessage() ); e.printStackTrace(); System.err .println( "NeoBackupServer thread on " + PORT + " killed" ); return; } while ( run ) { try { SocketChannel clientChannel = serverChannel.accept(); String clientAddress = clientChannel.socket().getInetAddress().toString(); int clientPort = clientChannel.socket().getPort(); System.out.println( "Accepted client: " + clientAddress + ":" + clientPort ); String response = "Hello " + clientAddress + " on port " + clientPort + "\r\n"; response += "This is " + serverChannel.socket() + " on port " + serverChannel.socket().getLocalPort() + "\r\n"; byte[] data = response.getBytes( "UTF-8" ); ByteBuffer buffer = ByteBuffer.wrap( data ); while ( buffer.hasRemaining() ) clientChannel.write( buffer ); clientChannel.close(); } catch ( IOException e ) { System.err.println( "Failed to accept client, " + e.getMessage() ); e.printStackTrace(); } } try { serverChannel.close(); } catch ( IOException e ) { System.err.println( "Failed closing server socket on Neo backup " + "server, " + e.getMessage() ); e.printStackTrace(); System.err .println( "NeoBackupServer thread on " + PORT + " killed" ); } } public void shutdown() { run = false; } public static void main( String args[] ) { NeoBackupServer nbs = new NeoBackupServer( 5678 ); nbs.start(); try { while ( true ) { try { Thread.sleep( 3000 ); } catch ( InterruptedException e ) { Thread.interrupted(); } } } finally { nbs.shutdown(); } } }