2011-06-27 3 views
0

Nous avons deux instances ou plus («nœuds») d'un programme se connectant les unes aux autres sur TCP. Nous l'avons implémenté comme suit:C# TcpClient Connectez-vous en premier pour vous connecter

// 1. Connect 
TcpClient connection; 

while(true){ 
    try 
    { 
     connection = new TcpClient("localhost", ((Port)Port).Value); 
    } 
    catch(SocketException/* Exception*/) 
    { 
     continue; 
    } 

    break; 
} 

// use the connection 

Cela se passe en parallèle. Le noeud qui se connecte en premier est considéré comme le parent du noeud auquel il se connecte. Nous voulons utiliser cette propriété pour générer un arbre couvrant. Comment savoir quel nœud est connecté en premier, car la seule façon de se connecter est d'appeler le constructeur de TcpClient? Où trouvons-nous des informations supplémentaires sur la connexion? Notez qu'à des fins de test, nous utilisons plusieurs ports sur une même machine. Il devrait fonctionner entre différentes machines sur Internet.

Répondre

1

Vous ne pouvez pas le déterminer à partir du code client.

Seul le serveur peut le déterminer. Et seul le serveur peut construire l'arbre que vous avez spécifié.

Si vous avez écrit ou avez accès à modifier le code du serveur, vous devriez le poster afin que vous puissiez obtenir de l'aide.

+0

Il n'y a pas de serveur central, nous avons des nœuds qui se connectent les uns aux autres. Nous voulons obtenir des informations supplémentaires du processus de connexion TCP, en particulier; quel noeud a été le premier à initier la connexion. – Maarten

+1

Ah, mais vous voyez: il n'y a pas de serveur * central *, mais vos instances doivent avoir un code serveur pour permettre à une autre instance de se connecter. C'est pourquoi vous devez avoir un port différent pour chaque instance. La volonté racine est celle qui ne peut pas trouver un serveur, et ainsi de suite. –

Questions connexes