Sto cercando di capire la classe 'SocketAsyncEventArgs' in C#. http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspxC# SocketAsyncEventArgs gestione ricezione e invio dati
Sto seguendo questo tutorial: http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
Ora mi sono bloccato sul modo in cui ho esattamente dovrei elaborare i dati con il mio server. Quello che sto cercando di fare è usare un SocketAsyncEventArgs per un client connesso con uno spazio Buffer allocato di 512 byte nel BufferManager. Quindi quello che voglio fare è decodificare i dati byte [] nella mia propria classe personalizzata (ClientPacket) che contiene il byte [] per la decodifica e la lettura.
Questo è perfetto ma il mio server non sempre risponde con i dati la domanda è:
posso utilizzare 1 SocketAsyncEventArgs per la ricezione e anello intorno per elaborare ricevere i dati, quindi allocare un SocketAsyncEventArgs dalla piscina ogni volta Devo inviare quindi restituirlo al completamento?
E come sa SocketAsyncEventArgs quando la lettura è completa? (quando ha finito con il buffer byte [] prima di sovrascriverlo con nuovi dati) come quando viene restituito al pool quando viene eseguito se non rispondo?
Hai detto impostandolo su un nuovo byte [], ma sto condividendo un blocco buffer di grandi dimensioni su tutto SocketAsyncEventArgs, se leggo da quel buffer buffer in un pacchetto, il blocco del buffer potrebbe essere sovrascritto dal prossimo arrivo dati, anche se copio l'array byte [], non va usando il Buffer Block per inviare/ricevere dati? Inoltre, come posso inviare dati con lo stesso oggetto quando un'operazione di ricezione può avvenire in qualsiasi momento? –
Sembra che tu stia assumendo una singola connessione socket tra 2 macchine. Non è possibile riutilizzare solo un singolo SocketAsyncEventArgs quando si gestiscono molte connessioni simultanee, il che è a mio parere la domanda. (E per cosa è stato creato SocketAsyncEventArgs). –
grazie SonOfPirate, Sarebbe fantastico se tu possa elaborare di più sulla ricezione di grandi quantità di dati. soprattutto chiarire per favore se devo ri-chiamare ReceiveAsync ogni volta prima di raggiungere la fine; o Framework lo farà per me? –