2011-04-28 3 views
1

Je suis relativement nouveau à C# alors s'il vous plaît, gardez-le moi. Je travaille sur une application serveur client (en C#, .NET 4.0) et je ne comprends pas certaines choses complètement.Client Server (TCP) Question (Heure)

Supposons qu'il existe une connexion établie entre un serveur TCP et un client. Pouvez-vous (sans erreurs) écrire au flux sous-jacent d'un point de terminaison si sur l'autre point de terminaison lu n'était pas encore appelé?

Si vous le pouvez, combien de temps devez-vous appeler lire() et toujours obtenir toutes les données? Combien de données peuvent contenir un tampon et combien de temps reste-t-il dans ce tampon s'il y a une sorte de tampon ? Quelles sont les données perdues si vous n'appelez pas lire pendant un certain temps (plus récent, plus ancien, ...?)

Peut-il y avoir des problèmes si vous déboguer à la fois application client et serveur en même temps, peut-il arriver cette connexion semble être fermée car une application attend pour passer à l'étape suivante en mode débogage?

Merci pour votre temps et vos réponses.

Répondre

1

Supposons qu'il existe une connexion établie entre un serveur TCP et un client. Est-ce que vous pouvez (sans erreurs) écrire dans le flux sous-jacent à partir d'un point de terminaison si l'autre point de terminaison n'était pas encore appelé?

Oui. le système d'exploitation a un tampon interne pour chaque socket dans son implémentation de socket. Tout sera stocké jusqu'à ce que ce tampon soit plein.

Si vous le pouvez, combien de temps faut-il appeler read() et obtenir toutes les données? Combien de données peuvent être dans un tampon et combien de temps reste-t-il là s'il y a une sorte de tampon? Quelles sont les données perdues si vous n'appelez pas lire pendant un certain temps (le plus récent, le plus ancien, ...?)

Tout dépend de la taille du tampon et de la fréquence à laquelle l'autre point de terminaison lui envoie des données . Vous pouvez utiliser Socket.ReceiveBufferSize pour l'ajuster. Y a-t-il des problèmes si vous déboguez à la fois l'application client et l'application serveur, peut-il se produire que la connexion semble être fermée parce qu'une application attend pour passer à l'étape suivante en mode débogage? Les connexions TCP sont toujours ouvertes à moins que l'un des points d'extrémité ne le ferme. Veuillez garder à l'esprit que d'autres parties de votre code peuvent fermer la connexion si vous utilisez des E/S asynchrones et ne cassez pas TOUS les threads dans chaque application.

+0

Merci pour votre réponse. Savez-vous peut-être ce qui se passe quand le tampon est plein? De nouvelles données sont perdues? Ou est le tampon "décalé" et jette les anciennes données pour faire place à de nouvelles. – Ben

+0

Je n'ai trouvé aucune information à ce sujet (et je n'ai jamais eu besoin de le savoir non plus). A mon avis, vous avez une mauvaise architecture d'application si vous pensez que cela peut arriver dans votre application. – jgauffin