Sto scrivendo un livello di messaggio per il mio sistema distribuito. Sto usando IOCP, cioè i metodi Socket.XXXAsync.Il buffer SocketAsyncEventArgs è pieno di zeri
Ecco qualcosa abbastanza vicino a quello che sto facendo (in realtà, la mia funzione di ricezione si basa sulla sua): http://vadmyst.blogspot.com/2008/05/sample-code-for-tcp-server-using.html
Quello che ho trovato ora è che all'inizio del programma (due test server che parlano tra loro) Ogni volta ottengo un numero di oggetti SAEA in cui il .Buffer è interamente pieno di zeri, tuttavia il .BytesTransferred è la dimensione del buffer (1024 nel mio caso).
Cosa significa? C'è una condizione speciale che devo controllare? Il mio sistema lo interpreta come un messaggio incompleto e procede, ma mi chiedo se in realtà mi mancano alcuni dati. Avevo l'impressione che se non fosse stato ricevuto nulla, non avresti ricevuto una richiamata. In ogni caso, posso vedere in WireShark che non ci sono pacchetti a lunghezza zero in arrivo.
Ho trovato il seguente quando l'ho cercato su Google, ma non sono sicuro che il mio problema sia lo stesso: http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/40fe397c-b1da-428e-a355-ee5a6b0b4d2c
http://go4answers.webhost4life.com/Example/socketasynceventargs-buffer-not-ready-121918.aspx
Non ho riscontrato errori di elaborazione dati da dati persi, quindi penso che non ci sia nulla di perso. Ma ciò lascia ancora la domanda sul perché il metodo sarebbe tornato con niente, molte volte. – Carlos
È difficile fornire la soluzione necessaria senza una breve descrizione (con codice). Tuttavia ho avuto esperienza con Sockets e posso consigliare di utilizzare un'astrazione più alta - Network Stream. Network Stream ha tutte le funzionalità di callback asincrono che si desidera utilizzare. Guardare http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx e http://msdn.microsoft.com/en-us/library/system.net.sockets. networkstream.beginwrite.aspx HTH –
Sono le stesse chiamate sottostanti? Sembra utile. Inoltre, il codice a cui mi riferisco è nel link. – Carlos