2012-10-09 3 views
0

J'essaie de me connecter à l'imprimante via mon code, puis d'appliquer les paramètres de sécurité sur l'imprimante. Avant d'appliquer la fonction de sécurité, il vérifie le mot de passe dans le module de code suivant. Le code se bloque après la ligneLe code se bloque après Network Stream.Read

stream.Flush()

if (responseStr.IndexOf(PrinterSecurityConstants.NewPrinterPass) > 0) 
{ 
    LogUtility.Info(PrinterSecurityConstants.ValidateUserNamePassword); 

    data = System.Text.Encoding.ASCII.GetBytes(
     ConfigurationManager.AppSettings[PrinterSecurityConstants.CurrentPass] 
     .ToLower() + CommonConstant.Carriagereturn); 
    stream.Write(data, 0, data.Length); 
    stream.Flush(); 
    bytes = stream.Read(dataResponse, 0, dataResponse.Length); 
    responseStr = System.Text.Encoding.ASCII.GetString(dataResponse, 0, bytes); 
} 

Ce que je dois faire pour que ce code fonctionne.

+0

pouvez-vous mettre un point d'arrêt sur stream.write et nous dire quelle est la valeur des données? –

+0

Quel type est 'stream'? Qu'est-ce que 'dataResponse'? –

+0

il a 9 nombres aléatoires et après que j'exécute la ligne et essaye encore d'ajouter la montre, il indique que l'expression est évaluée et n'a aucune valeur. Et le code se bloque après exécution de la ligne bytes = stream.Read (dataResponse, 0, dataResponse .Longueur); – Vidit

Répondre

0

Stream.Read() bloque jusqu'à ce que des octets soient disponibles pour la lecture. Si vous ne voulez pas faire cela, vous devez changer le mode de lecture.

+0

alors que dois-je utiliser pour lire le flux? – Vidit

+2

Généralement, la plupart des flux supportent la méthode Stream.DataAvailable() qui vérifie s'il y a des données à lire dans le Stream, sinon, vous pouvez soit bloquer jusqu'à ce qu'il y en ait, par Read(), soit faire une boucle sinon avant de tester à nouveau avec DataAvailable(). Habituellement, le blocage n'est pas un problème, car Read est sur un Thread différent du thread principal du programme. – SolidRegardless

+0

@SolidRegardless Je m'attendais à ce que Read() renvoie 0 s'il n'y avait rien dans le flux basé sur la documentation Microsoft suivante (voir la section Remarques): https://msdn.microsoft.com/fr-fr/library/system .net.sockets.networkstream.read% 28v = vs.100% 29.aspx "Si aucune donnée n'est disponible pour la lecture, la méthode Read renvoie 0." Je suppose que c'est seulement après la première lecture réussie. Quoi qu'il en soit, votre message m'a aidé à comprendre que l'utilisation du drapeau DataAvailable m'a aidé. – VineAndBranches

Questions connexes