InetAddress, Socket

Pessoal, gostaria de saber qual é a diferença dos dois códigos

addr = InetAddress.getLocalHost();
host = addr.getHostName();
socket = new Socket(host, 9999);
addr = InetAddress.getByAddress(new byte[]{127,0,0,1}); 
host = addr.getHostName();
socket = new Socket(host, 9999);

Estou perguntando isto pq o primeiro exemplo funciona, porém o segundo não e para mim os dois são a mesma coisa. O segundo código retorna o seguinte erro:

SEVERE: null
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

Você está executando ambos trechos simultaneamente? se sim, tente mudar a porta de algum deles…

Não estou executando simultaneamente.

Executei o primeiro: beleza, funcionou, o client e server se comunicaram
Depois mudei o código e executei o segundo: não funcionou, deu o erro citado