2014-05-25 1 views
1

Alors que la construction application simple client-serveur je dois un barrage routier« ... machine cible activement refusé ... » exception application simple client-serveur

tout en testant ses fonctionnalités dans un boucle- Retour Je reçois toujours

Aucune connexion n'a pu être établie car la machine cible activement refusé 127.0.0.1:6001

c'est le principal programme de serveur, il dispose dans un Task.Run(() => ...)

internal void startListener() 
{ 
ListenerThread = new Thread(new ThreadStart(socketListener)); 
ListenerThread.Name = "Listener"; 
ListenerThread.Priority = ThreadPriority.AboveNormal; 
ListenerThread.Start(); 
ComThreadDictionary.Add(ListenerThread.Name, ListenerThread); 
} 

     public void socketListener() 
     { 
      _infrastructure_TcpServerAndClient.CreateNewTcpListenerANDstart(); 
      while (true) 
      { 
       _infrastructure_TcpServerAndClient.tcpSocket = await _infrastructure_TcpServerAndClient.peerListener.AcceptSocketAsync(); 
       byte[] StreamMessage = new byte[9632]; 

       Thread.Sleep(500); 
       try 
       { 

        MessageLength = _infrastructure_TcpServerAndClient.GetMessageLength(ref 
        StreamMessage); 

       } 
       catch(Exception ex) 
       { 

        //"Remote host disconnected" 
       } 
       //Do stuff with message... 
      } 
     } 

c'est ce imbriqué dans cette méthode CreateNewTcpListenerANDstart()

  CreateNewTcpListenerANDstart() 
     { 
      peerListener = new TcpListener(IPAddress.Any, ComSettings.Port); 
      peerListener.Start(); 
     } 

peerlistener est déclarée à l'intérieur comme celui-ci: TcpListener publique peerListener intérieur _infrastructure_TcpServerAndClient méthode imbriquée pour recueillir des messages

internal int GetMessageLength(ref byte[] StreamMessage) 
    { 
     int MessageLength; 
     MessageLength = tcpSocket.Receive(StreamMessage, 0, StreamMessage.Length, 
     SocketFlags.None); 
     return MessageLength; 
    } 

EDIT J'ai vérifié mon client avec netcat d cela fonctionne il est donc plus hargneux la faute du serveur

EDIT2 le problème est avec cette fonction _infrastructure_TcpServerAndClient(), quand je prends tout le composant (peerListenr) hors de lui et il suffit de mettre la base (socketListener()) méthode tous les travaux bien -> pourquoi est-ce ??

+0

'peerListener 'enveloppe le socket sur lequel vous commencez à écouter, mais vous appelez' AcceptSocket() 'sur' _infrastructure_TcpServerAndClient'. –

+0

corrigez-moi si je me trompe mais j'ai besoin de 'AcceptSockt' pour attendre la connexion entrante et les gérer, ce qui signifie une opération bloquée, n'est-ce pas? – LordTitiKaka

+0

Vous avez raison, mais vous devez probablement appeler 'AcceptSocket()' sur le 'TcpListener' que vous avez démarré (' peerListener'), pas sur un autre. –

Répondre

1

Ok, donc le problème était simple, varient dans cette fonction je manipuler les paramètres localement qui conduisent à peerListener.Start() à démarrer que localement, en changeant à statique a fait le tour ...

CreateNewTcpListenerANDstart() 
{ 
    peerListener = new TcpListener(IPAddress.Any, ComSettings.Port); 
    peerListener.Start(); 
} 
Questions connexes