Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • Anonim

    Piszę aplikację sieciową do przesyłania wiadomości między dwoma użytkownikami w sieci. Oparta jest o datagramy, użytkownik łączy się z drugim przy pomocy DatagramSocket.

    No i teraz pojawia się problem - testując to u siebie na maszynie (sam ze sobą), zauważyłem, że jeśli coś uruchamia się w "trybie serwera" (czyli oczekuje na połączenia) i na tym samym porcie siedzi "klient" (ten sam port, ten sam host), to serwer nie może wysyłać wiadomości do klienta, a klient do serwera owszem (klient łączy się z serwerem po wpisaniu do okienka dialogowego adresu hosta). Krótko mówiąc - tworzy się tylko połączenie od klienta do serwera, a z serwera do klienta już nie. Żeby nie było - po ustanowieniu połączenia serwer sam ustanawia z połączenie z klientem (czyli komunikacja odbywa się tak naprawdę na dwóch socketach - jeden odbiera, drugi nadaje). Dlaczego to nie działa, tak jak powinno? Bawiąc się zwykłymi socketami mogłem się łączyć sam ze sobą (w sensie dwa różne klienty ze sobą), a tutaj już to nie daje rady.
  • Shamrock

    Ustaw inny port dla klienta inny port dla serwera. Mozna ustawic staly port serwera a klientowi zostawic dowolnosc , lub jesli jest firewall jakis port na stale , ale inny od serwerowego. Poza tym lepiej jest zaimplementowac rozwiazanie TCP a nie UDP. UDP ma ograniczonia wielkosci datagramu, poza tym jest to tryb bezpolaczeniowy - czyli jesli
    wiadomosc zginie to nie bedziesz o tym powiadomiony.
  • Anonim

    Teraz to już po ptakach. Sama aplikacja była bezserwerowa, tzn. każdy do każdego mógł się podłączyć. Porty ustawiłem dynamiczne, w pierwszym wysyłanym datagramie wysyłam port odbiorczy komputera wysyłającego i ot całe rozwiązanie.

    Co do samego wyboru między TCP a UDP - miałem po prostu narzucone, że musi to być UDP.