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?