2009-09-18 11 views
8

Piszę prosty program klient-serwer.jak rozróżnić, czy klient używa TCP lub UDP od strony serwera

Klient wysyła niektóre wiadomości do serwera za pomocą protokołu UDP lub TCP. Serwer musi obsługiwać zarówno protokoły UDP, jak i TCP.

Jeśli klient wysyła wiadomość przy użyciu protokołu UDP, sekwencja wywołań metod w kliencie to socket(),bind(),sendto(),recvfrom(),close(), a na serwerze socket(),bind(),sendto(),recvfrom(),close().

Jeśli używa TCP, sekwencja połączenia na serwerze to socket(),bind(),listen(),accept(),send(),recv(),close(). i że klient jest socket(),bind(),connect(),send(),recv(),close()

w moim programie, użytkownik/klient danego wyboru w początku, aby wybrać to, co chcesz używać UDP lub TCP. Tak więc, moim głównym problemem jest to, w jaki sposób mogę wiedzieć lub rozróżniać po stronie serwera, czy klient wysyła wiadomość za pomocą TCP lub UDP. Jeśli używa TCP, muszę zadzwonić listen(), accept(), send(), recv() i jeśli używa UDP, nie wywołuję listen(), accept(), ale wywołuję sendto() i recvfrom ().

Jak więc mogę rozróżnić/wiedzieć to na początku, aby móc wykonywać odpowiednie wywołania funkcji.

Dzięki.

+1

Czy powinienem utworzyć dwa gniazda po stronie serwera, jeden dla UDP i drugi dla TCP? –

+0

seg.server.fault, tak. –

+2

@ seg.server.fault: Polecam _nie_ wywołanie 'bind()' w kodzie klienta. Chociaż jest technicznie możliwe (i wymagane w bardzo szczególnych sytuacjach), domyślne zachowanie bez po stronie klienta 'bind()' jest zwykle tym, czego potrzebujesz w warstwie aplikacji. Pamiętaj też, że możesz wywołać 'connect()' na gnieździe UDP. Nie robi żadnego uzgadniania, ale oznacza, że ​​możesz użyć 'send/recv' zamiast' sendto/recvfrom', co może sprawić, że logika klienta stanie się prostsza. – Tom

Odpowiedz

15

Przed pakiet dotrze do Ciebie, nie wiem, czy to UDP lub TCP.

Więc chcesz połączyć się z gniazdami UDP i TCP, jeśli oczekujesz żądań w obie strony.

Kiedy to zrobiłeś, po prostu wiesz, w jaki sposób przyszedł przez gniazdo, przez które otrzymałeś pakiet.

1

pozwól gniazdo TCP na porcie X słuchać i wykonywać połączenia poprzez port UDP Y

+6

można bezpiecznie słuchać na protokołach UDP i TCP na tym samym porcie. –

5

Po utworzeniu gniazda, mijamy typ - SOCK_STREAM (TCP) lub SOCK_DGRAM (UDP)

więc dwa rodzaje ruchu będzie na dwóch różnych gniazd.

+0

To nie pomaga stronie serwera. OP wie już, że strona klienta zdecyduje się na TCP w porównaniu z UDP. Problem polega na wspieraniu ich po stronie serwera, a to znacznie więcej wysiłku niż zwykła zmiana typu gniazda. – Tom

Powiązane problemy