J'ai une boucle while do qui lit une mémoire tampon à partir d'un NetworkStream
objet la condition while est networkStream.CanRead
tant qu'elle peut lire, elle doit continuer à lire à partir du tampon. Le seul problème est quand je lis du tampon et convertis en chaîne, il n'y a rien dedans. c'est-à-dire son vide.NetworkStream.CanRead renvoie true mais le tampon ne renvoie aucune valeur
Pourquoi cela se produirait-il?
Ceci est une application ASP.NET (de VS2005)
@dtb Info Code:
Je passe l'objet NetworkStream
networkStream
// between 2 functions in a loop
{
SendMessage(networkStream, message);
ReadMessage(networkStream);
}
chose drôle est que si elle se reconnecte et se connecte à nouveau, le Send/Read fonctionne bien. Peut-il s'agir d'un problème avec Send (je ne reçois aucune exception ici) ou de la réutilisation de l'objet NetworkStream
. Cela fonctionne correctement localement sur un serveur TCP de test, mais j'obtiens le problème ci-dessus en cours de production (Windows Server 2003) (ie ne peux rien lire du flux - jusqu'à ce que je l'expire (quitte la boucle) après 10s)
ReadMessage(networkStream)
{
if (networkStream != null && networkStream.CanRead)
{
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
do
{
int numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
string messageRead = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead);
myCompleteMessage.Append(messageRead);
} while (networkStream.CanRead);
}
}
S'il vous plaît noter: qu'il lit un message dans la première fois, après une autre demande de données est envoyé sur le même flux de réseau cela se produit sur le 2ème go – soldieraman
@soldieraman: Si la réponse de darkassassin93 ne répond pas à votre question, s'il vous plaît nous montrer votre code. J'ai l'impression que vous supposez des choses sur les limites de paquets et/ou le nombre d'octets renvoyés par la méthode 'Read' qui peut être faux. – dtb
@dtb mettre du code info – soldieraman