2010-11-20 6 views
1

J'utilise NetworkStream d'un TcpClient pour envoyer des octets d'un serveur .NET à un client Silverlight qui les reçoit via un socket. L'envoi depuis le client se fait via Socket.SendAsync. Ma question est, quelle est la quantité minimale d'octets que je peux espérer recevoir en une fois des deux côtés, sans avoir besoin d'envoyer la longueur du message et de mettre moi-même des messages de plusieurs octets ensemble.Nombre minimum garanti d'octets envoyés en une fois via NetworkStream

Merci, Andrej

+2

1 octet - toujours envoyer la longueur ou utiliser un caractère de fin – CodesInChaos

Répondre

4

Vous devez absolument si envoyer la longueur du message. Les flux de réseau sont précisément cela - flux d'informations. Fondamentalement, il existe trois façons de reconnaître la fin d'un message:

  • Prefix les données avec la longueur (ne pas oublier qu'il est au moins théoriquement possible que vous ne serez pas même toute la longueur données dans un paquet)
  • utilisez un délimiteur messages/terminateur
  • Seulement envoyer un message par voie par raccordement, et fermer la connexion après
3

Cela dépend de vos paramètres réseau, mais la longueur par défaut pour les noeuds du réseau est de 1500 octets et la plupart des modems prennent quelque chose de ce. Ainsi, la plupart des maisons ont une taille de paquet de 1460 octets.

La taille optimale pour votre situation peut être calculated

Mais les gens peuvent toujours avoir leurs propres paramètres, donc il n'y a aucune garantie que vous obtenez la taille du paquet optimale pour tous les clients.

Questions connexes