3 votes

Protobuf.net dé-sérialiseur attend indéfiniment

J'ai un simple TCPlistener qui écoute les connexions et une fois qu'une connexion est établie, une méthode essaie d'envoyer des données et le côté serveur essaie de les lire.

côté client:

using (NetworkStream stream = new NetworkStream(_client.Client, false))
            {
                Serializer.Serialize(stream, MyPersonObject);
            }

côté serveur:

using (NetworkStream stream = new NetworkStream(_client.Client, false))
            {
                var myObject = Serializer.DeSerialize(stream);
            }

Cependant, j'ai remarqué que une fois qu'il arrive à la méthode DeSerialize, il reste bloqué et attend indéfiniment. Notez que cela ne se produit PAS avec BinaryFormatter en utilisant les mêmes étapes exactes. Je ne sais pas ce qui ne va pas.

4voto

Marc Gravell Points 482669

Un flux protobuf n'est pas "fermé" - il lit jusqu'à la fin du flux par défaut, ce qui signifie qu'il lira jusqu'à ce que le socket TCP entrant soit marqué comme complet.

Si vous avez l'intention d'envoyer plusieurs messages, essayez d'utiliser les versions "WithLengthPrefix" de serialize et deserialize; cela ajoute un encadrement de message pour vous, lui permettant de savoir où chaque chargement se termine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X