Combien de mémoire tampon ne NetworkStream et TcpClient?
Nous écrivons une TCPServer et le programme Client. De combien d'espace est là, dans la TcpClient tampon? Comme, à quel point il va commencer à jeter des données? Nous essayons de déterminer si le TcpClient peut-être bloqué ou si elle doit aller dans son propre thread d'arrière-plan(de sorte que le tampon ne peut pas obtenir le plein)..
OriginalL'auteur Earlz | 2010-03-28
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir les tailles de tampon de TcpClient.ReceiveBufferSize et TcpClient.SendBufferSize .
La disposition des tailles de tampon varie en fonction des données est reçu/admis(ou pas) au niveau TCP. TcpClient est le blocage par défaut.
Pas de données seront jetés comme un résultat de pleine tampons, bien que les données pourraient être jeter en vertu des conditions d'erreur (comme le peer disparaît/plantages/sorties, etc.)
Non, TCP fournit le contrôle de flux. Lorsque les tampons sont plein, les autres butées de fin de course de l'envoi.
Je suis en charge du serveur de trop, donc si cela arrive, alors ce qui se passe au niveau du serveur? Quand c'est les tampons de remplir également à l'aide de
TcpServer
C'est la même chose pour le côté client comme pour le serveur. L'envoi de blocs. Il permet de bloquer de l'intérieur que les tampons sont pleins, et les données ne peuvent être remis à ce moment de vider les tampons (par exemple, comme un résultat que l'autre extrémité havn pas lu toutes les données qui ont été envoyées )
OriginalL'auteur nos
La documentation MSDN dit la taille par défaut de la envoyer et recevoir tampons pour
TcpClient
est de 8192 octets, ou 8K. La documentation ne précise pas de limite à la taille de ces tampons peuvent être.Je suis sûr que vous êtes au courant, vous pouvez envoyer et recevoir des données via le
TcpClient
à l'aide de son sous-jacentNetworkStream
objet. Vous avez le contrôle sur le fait que ces sont en mode synchrone ou asynchrone. Si vous voulez comportement synchrone, utilisez leRead
etWrite
méthodes deNetworkStream
. Si vous souhaitez un comportement asynchrone, utilisation de laBeginRead
/EndRead
etBeginWrite
/EndWrite
opérations.Si vous recevez des données dans le cadre d'une application front-end, je vous recommande fortement de le faire dans un thread secondaire, que ce soit en utilisant les méthodes asynchrones ou synchrones dans un thread séparé. Cela permettra à votre INTERFACE utilisateur d'être à l'écoute de l'utilisateur, tandis que de gérer l'envoi et la réception de données en arrière-plan.
Je ne suis pas sûr qu'il y a une énorme différence entre les deux. Les méthodes asynchrones, par exemple,
BeginRead(), execute their respective
AsyncCallback " méthodes sur un thread séparé. À la fin de la journée, vous devez utiliser un thread secondaire si vous essayez d'envoyer/recevoir des données pendant que vous êtes également le traitement de la saisie de l'utilisateur à partir d'une INTERFACE utilisateur.c'est une idée fausse commune. .Net d'e/S Asynchrone méthodes d'exploiter une fonctionnalité du système d'exploitation d'appel I/O Ports de fin, donc pas de threads sont bloqués ou en cours d'utilisation lors de l'attente pour les I/O, soit dans une douille, ou à partir du système de fichiers, ou d'un tube nommé ou que ce soit.
I/O ports de fin ne reçoit que les données dans le système; les données doivent encore être traitées quelque part. Techniquement, les données être traitées sur le thread de l'INTERFACE utilisateur, mais à mon humble avis, c'est une mauvaise pratique, car elle empêche l'INTERFACE utilisateur d'être à l'écoute de la saisie de l'utilisateur.
Assez vrai, je pensais que vous parliez du blocage du thread jusqu'à ce que le I/O retours.
OriginalL'auteur Matt Davis