Domanda

Qui è uno scenario con socket asincroni che ho Dont't capisco ... Ho 2 socket TCP, un client socket e di un socket server. Presa Il mio server è associato e in ascolto su una porta.

I miei socket client si connettono al socket server (utilizzando BeginConnect / EndConnect). Ho quindi inviare un messaggio al server utilizzando BeginSend (). Sul lato server, non faccio una ricezione () o BeginReceive ().

Quello che succede è che il mio AsyncCallback specificato per la mia chiamata BeginSend viene invocata e la sua IAsyncResult mi dice che ha completato e la chiamata a Socket.EndSend () non sollevare alcuna eccezione ...

C'è qualcosa che non ho ricevuto o non dovrei il mio AsyncCallback essere chiamato solo se la chiamata BeginSend in realtà manda qualcosa al server (es .: richiamata chiamato dopo che il server ha ricevuto tutti i byte)? Se c'era non ricevono alcun fatta sul server, non dovrebbe la mia richiamata essere chiamato dopo la SendTimeout scade e la mia chiamata a Socket.EndSend poi avrebbe sollevato un'eccezione?

Grazie

È stato utile?

Soluzione

No, TCP / IP gestisce tutto questo per voi. C'è buffer su entrambi i lati della connessione che conterrà i dati finché non può essere ricevuto. Senza il buffering, ci sarebbe probabilmente la latenza orribile quando l'invio di comunicazione loquace.

Pensate a come mailing una lettera. Si trova nella tua casella di posta elettronica fino a quando l'uomo lo raccoglie. Una volta che accade, è stato inviato. Non è ancora stato ricevuto. Potrebbe essere in transito, o potrebbe essere in attesa nella loro casella di posta per loro di leggere.

In modo da ottenere la richiamata dopo BeginSend ti dice solo che era inviato . L'unico modo per sapere con certezza che l'altra parte ha ricevuto ed elaborato i dati è quello di richiedere un certo tempo di tornare riconoscimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top