Question

Je voudrais vider le tampon de lecture du socket afin d’écrire le code suivant ...

byte[] tempBuffer = new byte[1024];
int readCount = 0;
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0)
{
    // do with tempBuffer
}

Mais la méthode Read () étant bloquée, j'ai ajouté tcpSocket.ReceiveTimeout = 1; . Et cela fonctionne comme avant.

Comme je le sais, cela est généralement utilisé en C ++. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Vous pouvez utiliser le DataAvailable pour savoir s’il ya quelque chose à lire avant d’appeler la méthode Read.

Autres conseils

Utilisez le NetworkStream. Lire () directement au lieu d'utiliser GetStream () :

  

Si aucune donnée n'est disponible pour la lecture,   la méthode Read renvoie 0. La lecture   opération lit autant de données que c'est   disponible, jusqu'au nombre d'octets   spécifié par le paramètre size. Si   l'hôte distant ferme le   connexion, et toutes les données disponibles a   été reçu, la méthode de lecture   se termine immédiatement et renvoie zéro   octets. NoteRemarque:

Pourquoi voulez-vous vider le tampon de lecture? Si vous ne voulez pas que le contenu de la socket soit fermé, fermez-le. Si vous ne souhaitez pas afficher le contenu actuel, mais souhaitez disposer de données ultérieures, comment savoir à quel moment il démarre Si les données sont un flux non encapsulé ...

On dirait que vous résolvez le problème de la mauvaise façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top