Sto scrivendo un semplice programma client-server.come differenziare se il client utilizza TCP o UDP dal lato server
Il client invia alcuni messaggi al server utilizzando UDP o TCP. Il server deve essere in grado di supportare sia UDP che TCP.
Se il client invia un messaggio utilizzando UDP, la sequenza di chiamate di metodo nel client è socket(),bind(),sendto(),recvfrom(),close()
e quella nel server è socket(),bind(),sendto(),recvfrom(),close()
.
Se utilizza TCP, la sequenza di chiamata nel server è socket(),bind(),listen(),accept(),send(),recv(),close()
. e che nel client sia socket(),bind(),connect(),send(),recv(),close()
Nel mio programma, l'utente/cliente è data scelta in partenza per selezionare quello che si desidera utilizzare UDP o TCP. Quindi, il mio problema principale è come posso sapere o differenziare sul lato server, se il client sta inviando un messaggio usando TCP o UDP. Se usa TCP, devo chiamare listen(), accept(), send(), recv() e se usa UDP, non chiamo listen(), accept() ma inviamo sendto() e recvfrom ().
Quindi, come posso differenziarlo/sapere questo all'inizio così da poter effettuare chiamate di funzione appropriate.
Grazie.
Quindi, dovrei creare due socket sul lato server, uno per UDP e un altro per TCP? –
seg.server.fault, sì. –
@ seg.server.fault: vorrei raccomandare _non_ chiamando 'bind()' nel codice cliente. Sebbene sia tecnicamente possibile (e richiesto in situazioni molto specifiche), il comportamento predefinito senza 'bind() sul lato client è solitamente quello che si desidera a livello dell'applicazione. Inoltre, tieni presente che _can_ chiama 'connect()' su un socket UDP. Non fa alcun handshaking, ma vuol dire che puoi usare 'send/recv' invece di 'sendto/recvfrom', il che può finire per semplificare la logica del client. – Tom