Comment appeler NetworkStream.Read () sans blocage?
-
06-07-2019 - |
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?
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.