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.
Czy powinienem utworzyć dwa gniazda po stronie serwera, jeden dla UDP i drugi dla TCP? –
seg.server.fault, tak. –
@ 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