pbeza / android

Projekt z Androida 2015/2016
0 stars 0 forks source link

Umożliwić ustanowienia połączenia niezależnie od tego kto jest GroupOwnerem #10

Closed pbeza closed 8 years ago

pbeza commented 8 years ago

Obecnie jest tak, że jeden z telefonów, który jest GroupOwner'em, otwiera ServerSocket i do niego podłącza się drugi telefon. Taki model wprowadza trudność gdy jako pierwszy zadziała telefon, który nie jest GroupOwner'em i będzie próbował się podłączyć do ServerSocket'a telefonu, który nie wywołał jeszcze metody accept() na ServerSocket'cie, który w chwili próby podłączenia telefonu-klienta, może jeszcze nawet nie istnieć.

Trzeba wyeliminować ten problem.

pbeza commented 8 years ago

Zmieniono implementację na UDP, teraz nie ma żadnego wywołania accept() na ServerSocket'cie. Nawet jak serwer nie słucha, to klient wysyła UDP i ma w poważaniu czy serwer odebrał pakiet (piękno UDP, tak ma być :-)).

Każdy z telefonów przy starcie serwisu tworzy DatagramSocket na ustalonym porcie, a następnie woła na nim blokującą metodę receive(), więc połączenie od drugiego telefonu powinno być zawsze przyjmowane (chyba, że receive() osiągnie timeout, ale wtedy powtarzamy receive() w nieskończoność, chociaż domyślnie timeout jest ustawiony na 0, co oznacza nieskończenie długie czekanie - tak jak chcemy).