Witam, jako że od kilku lat programuję w .necie napisanie client-server nie stanowi dla mnie żadnego problemu. Aczkolwiek, ostatnio zostałem zmuszony do zrobienia tego w javie. No i jest problem, przeszukuję internet i nie mogę znaleźć dobrego kodu na client-server. Interesuje mnie oczywiście kod asynchroniczny. Czy może ktoś zarzucić źródełkiem bądź podpowiedzieć jak to zrobić. Jakoś nie podoba mi się podejście z tworzeniem wątku który w nieskończonej pętli próbuje czytać z socketa.
Chodzi mi mniej więcej o javowy odpowiednik tego kodu:
CLIENT C#

public bool Connect(IPAddress ipAddr, int port)
{
       ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
       ClientSocket.Connect(new IPEndPoint(ipAddr, port));
       WaitForData();
}

public bool Send(byte[] bytes)
{
       ClientSocket.Send(bytes);
}

void WaitForData()
{
       ClientSocket.BeginReceive(dataBuffor, 0, dataBuffor.Length, SocketFlags.None, new AsyncCallback(ReceiveData), null);
}

void ReceiveData(IAsyncResult asyn)
{
       int iRx = ClientSocket.EndReceive(asyn);
       if (iRx != 0)
      {
            byte[] bytesArray = new byte[iRx];
            Array.Copy(dataBuffor, bytesArray, iRx);
            NewDataReceived(bytesArray);
            WaitForData();
      }
} 

Edit:
Swoją drogą, mam w sieci komputer któremu za pomocą (winapi) WriteMachineNameRegKey ustawiłem nazwę na powiedzmy "foo". Potrzebuje adresu ip tego urządznia (żeby połączyć sockety). W dotnecie robię to używając:

Dns.GetHostEntry("foo");

Otrzymuję w ten sposób adres ip, podobnie jest jak w wierszu poleceń wpiszę:
ping foo
otrzymuję adres ip
No i teraz pytanie, jak otrzymać adres ip maszyny o nazwie 'foo' używając javy?