2011-02-12 1 views
-1

permet maintenant prendre une secnario où nous utilisons une prise de verrouillage recevoir et le paquet est de 5000 octets avec receivetimeout fixée à une secondeoption de socket receive temps

s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000); 

int bytes_recevied = 0 ; 
byte [] ReceiveBuffer = new byte[8192] ; 

try 
{ 
    bytes_received = s.Receive(RecevieBuffer) ; 
} 
catch(SocketException e) 
{ 
     if(e.ErrorCode == 10060) 
     { 
      Array.Clear(ReceiveBuffer,0,ReceiveBuffer.Length); 
     } 
} 

maintenant notre secnario dicte que 4000 octets sont allés jeté alreadys, le socket est toujours bloquant et une erreur est survenue à l'extrémité de réception, maintenant à la réception nous aurions à la disposition des 4000 octets en attrapant la socket ecxecption

est-il une garantie que la prise à l'extrémité émettrice wont thows 1000 octets qui restent le socket d'envoi sait-il les tronquer s'il est déconnecté lorsque nous essayons de recevoir à nouveau les premiers octets que nous recevons? Qu'est-ce que je demande: a) Est-ce que tcp a un mécanisme qui dit à la socket de se débarrasser du reste du message? b) Y a-t-il un drapeau de socket que nous pourrions envoyer ou recevoir avec qui dit aux buffers de disposer du reste du message?

+0

Votre code et la plupart de votre question n'a pas beaucoup de sens. Probablement parce que vous avez mal compris que TCP ne vous offre qu'un flux et ne garantit rien sur les paquets. – CodesInChaos

Répondre

1

Tout d'abord, TCP/IP operates on streams, not packets. Vous avez donc besoin d'un encadrement de message dans votre protocole, quelles que soient les tailles de mémoire tampon, les appels bloquants ou les MTU.

Deuxièmement, chaque connexion TCP est indépendante. La conception normale est à close a socket lorsqu'il y a une erreur de communication. Une nouvelle connexion de socket peut alors être établie, ce qui est complètement indépendant de l'ancien.

+0

vous avez complètement raté le point, je sais que cela fonctionne sur les flux da .. –