Sto riscontrando un problema nel ricevere i dati da un client usando i socket .net. Il client comunica con TCP e invia uno o due pacchetti prima di chiudere immediatamente la connessione. La ricezione va così:Reset connessione socket prima che potessi leggere i dati
Socket newConnection = listener.EndAccept(ar);
newConnection.BeginReceive(myBuffer,0, length, SocketFlags.None, Callback,null);
e l'esecuzione non andrà oltre. Il beginReceive lancia immediatamente una SocketException che dice che la connessione è stata ripristinata. Non riesco a ottenere i dati ricevuti.
Ecco quello che vedo per questa connessione su Wireshark:
SYN // SYN, AKC // AKC
PSH, ACK for 156 bytes
PSH, ACK for 176 bytes
RST, ACK
E questo è tutto. C'è qualche mezzo per ottenere questi dati ricevuti anche se la connessione è chiusa dal client?
C'è qualche modo si può avere il client di attendere un pacchetto "riconosciuta" dal programma di ricezione prima di chiudere? –
Non posso davvero. Il client è utilizzato su altri server e funziona, quindi dovrei essere in grado di fare lo stesso. Non ho accesso al codice sorgente di questi altri server per vedere come lo fanno. –
Non si può fare molto se non si leggono i dati prima che un RST entri (questo indica che il mittente sta chiudendo in modo abortivo). Perché il mittente invia un RST anziché un FIN (ad esempio, chiusura aggraziata, [Socket.Shutdown] (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx))? –