Java klient-server

0

Mam napisany prosty serwer w Javie (sockety), który obsługuje wielu klientów, robi proste działanie, a następnie wraca wartość do klienta. Potrzebuje przetestować ten program na zewnętrznej maszynie, ponieważ Wireshark nie obsługuje lokalnego ruchu. Może moje pytanie jest prozaiczne, ale nie wiem jak to ugryźć: w jaki sposób mogę zainicjować takie połączenie, aby postawić server jako zewnętrzną maszynę, a mój komputer jako klienta?

Mam pomysł, aby zrobić to na virtual box, ale w jaki sposób? Czy mógłby mi podać jakieś linki, wytłumaczyć? Chciałbym to zrobić, ale sam już nie mam pomysłu. Instaluję Windows 7 na maszynie wirtualnej, i następnie wystarczy, że odpalę tam program odpowiedzialny na serwer?

Z góry dziękuję za pomoc.

1

Najlepiej postaw dwie maszyny wirtualne, a w ustawieniach zrób połączenie sieciowe między nimi, albo ustaw obie maszyny, żeby były za wirtualnym NAT. W takim przypadku, Wireshark zainstalowany na jednej z tych maszyn powinien zarejestrować cały ruch sieciowy. Sposób konfiguracji połączeń sieciowych nie jest istotny, ważne, żeby maszyny odpowiadały na PING wzajemnie. Do testów najlepiej całkowicie wyłączyć zaporę sieciową w obu maszynach.

0

@andrzejlisek: mam pytanie, ponieważ wszystko ładne działa, z lekkimi przejściami. Mam zainstalowane dwie maszyny: jedna serwer – Windows 8 i klient – Ubuntu. Na Ubuntu jest zainstalowany Wireshark i znajduje ruch pomiędzy sieciami. Wysyłam klientem np. "2 2" i zwraca mi wartość 4. Teraz w wireshark mam dziwne znaczki, czy nie powinno mi w pakietach wysyłać dane 2 2, oczywiście wireshark konwertuje ze strumieni binarnych na ASCII. Przesyłam zdjęcie w załączniku:

1

Proponuję po obu stronach rejestrować wszystkie otrzymane komunikaty w logu, w konsoli, do pliku, jak wolisz. Myślę, że jeżeli rejestrowane komunikaty będą zgodne z oczekiwanymi, to analiza Wiresharkiem nie będzie potrzebna. Jeżeli jest to czysty socket TCP/IP, to w pakiecie widocznym w Wireshark powinien być ten tekst (ciąg bajtów), jaki był wysłany.

Jakiś czas temu robiłem takie rzeczy, ale w C#, jednak problem jest podobny. Tu pojawia się taki problem, że trzeba w jakiś sposób w samym komunikacie podać wielkość danych lub znacznik końca danych. Chodzi o to, że przy przesyle dużego pakietu zostanie on podzielony na części i druga strona musi odczytać wszystkie poprzez polecenie typu "Odbierz z bufora" tyle razy, aż zgromadzisz cały pakiet. Jednym z najprostszych rozwiązań jest zakodowanie w dwóch lub czterech bajtach (w zależności od potrzebnej maksymalnej wielkości) liczby bez znaku będącą wielkością paczki danych.

Wtedy w Wiresharku powinny być te 4 bajty i to, co po nich następuje.

0

@andrzejlisek: dzięki za odpowiedź. Długo nie odpisywałem, ponieważ szukałem rozwiązania. Od siebie mogę dodać, że znalazłem i jest to dziwne działanie Wireshark. Dlaczego? Ponieważ muszę uruchomić nasłuch na konkretnym interfejsie, a następnie uruchomić serwer klienta i wtedy czyta przesyłane dane. Jeżeli odpale wcześniej klienta i serwer to wireshark pokazuje zakodowane dane przesyłane przez serwer. Zmyliło mnie również to, że ja w swoim programie nie przesyłam teksty, tylko obiekt, więc WIreshark łapie obiekt i pola obiektu, ale nie jest wstanie odczytać ich wartości.

Czy używałeś może SSL w programowaniu Socketów? Ponieważ mam mały problem z autoryzacją?

1 użytkowników online, w tym zalogowanych: 0, gości: 1