2010-04-30 5 views
1

Mon programme utilise des sockets pour la communication entre processus. Un serveur écoute sur un port de socket (B) sur localhost en attente d'une liste de clients TCP à connecter. Et à l'autre extrémité du serveur est une autre prise (A) qui envoie des données à Internet. Le serveur est conçu pour prendre tout ce que les clients TCP lui envoient et le transmettre à un serveur sur Internet. Ma question est de savoir si deux des clients TCP ont envoyé des données en même temps, est-ce que cela va être un problème pour la socket sortante du serveur (A)?Plusieurs tâches d'écriture sur un même problème de socket

Merci

+0

Cela dépend. Si vous mélangez arbitrairement toutes les données client dans une connexion TCP unique, le résultat n'aura guère de sens. – dtb

+0

Je suis d'accord avec @dtb, vous n'avez pas à vous soucier du problème de concurrence si vous n'avez qu'un seul Thread qui gère le 'Socket'. – ChaosPandion

Répondre

2

Le MSDN docs vous recommandons d'utiliser BeginSend et EndSend si plusieurs threads utiliseront le même socket pour transmettre des données.

Je suggère donc que vous pouvez soit utiliser ces méthodes ou écrire des données sortantes vers une file d'attente synchronisée, à partir de laquelle un seul thread alors choisir des données hors de la file d'attente et l'envoyer sur la douille (A)

1

Vous n Ne décrivez pas comment vous multiplexer le trafic de plusieurs flux client sur un seul flux sortant. Juste en plaçant arbitrairement des morceaux de trafic client dans le flux est garanti pas le travail. L'extrémité de réception à l'extrémité opposée de l'intertube n'aura aucune idée de ce que les octets appartiennent à quelle conversation.

Je vous recommande de vous concentrer d'abord sur l'extrémité opposée. Quelle machine est là, qu'est-ce qu'elle fait, qu'est-ce qu'elle a besoin de savoir sur les multiples clients au niveau local.

Questions connexes