2014-04-24 2 views
0

J'essaye de créer un programme afin d'envoyer et de recevoir des chaînes d'un autre ordinateur sur le réseau. Il n'y aura qu'une seule paire d'ordinateurs connectés ensemble à travers le programme. La majeure partie est faite et fonctionne parfaitement sauf pour la première connexion. La première connexion peut être établie seulement si les deux ordinateurs ouvrent le programme en même temps. Parce que le serveur sur l'autre ordinateur ne sera pas en cours d'exécution, la connexion sera refusée. Voici le code:En attente de connexion sur le réseau

public MultiplayerState2(Game1 game) 
    { 
     this.game = game; 
     localIp = GetLocalIP(); 


     server = new TcpListener(IPAddress.Parse(localIp), localPort); 


     server.Start(); 

     networkingThread = new Thread(getData); 
     networkingThread.Start(); 

     clientThread = new Thread(connectClient); 
     clientThread.Name = "Connect Client"; 
     clientThread.Start(); 
    } 

    void connectClient() 
    { 
     while (client == null) 
     { 

      try 
      { 
       client = new TcpClient(remoteIp, remotePort); 
       Console.WriteLine("Connected"); 
       clientThread.Abort(); 
      } 
      catch 
      { 
       Console.WriteLine("Waiting for partner"); 

      } 
     } 

    } 

Ici, connectClient est censé attendre une connexion d'un ordinateur. Mais là, la seule chose que je reçois en sortie est waiting for partner. Est-ce la bonne façon d'attendre une connexion? Et si oui, pourquoi ça ne marche pas?

+0

Quelle est l'exception levée? – FodderZone

+0

@FodderZone Il s'agissait d'une exception SocketException provoquée par le fait que le 'TcpListener.Start' n'était pas appelé au moment où le client essayait de se connecter. – user26830

+0

Veuillez attraper le SocketException et rechercher/passer le ErrorCode. http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx – FodderZone

Répondre

0

Le constructeur TcpClient tente de se connecter au serveur qui écoute sur le port spécifié. Mais ce processus a un délai d'une minute. Si la connexion ne réussit pas dans 1 minute, elle sera fermée et une exception sera levée; par conséquent, vous obtenez l'exception.

Ceci est la seule façon de tenter de se connecter au serveur. La seule chose que vous pouvez ajouter est de faire dormir le thread (Thread.Sleep(n)) pendant un certain temps, comme 10 secondes ou plus (selon votre contexte).