2010-11-30 4 views
2

J'essaye de tester un peu comm. code sur TCP en C#. J'ai créé un fil rapide qui tient debout un TcpListener. Chaque fois que le client TcpClient essaie de se connecter, j'obtiens une exception "Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est normalement autorisée". Pouvez-vous ne pas héberger sur et se connecter au même port dans le même processus?Connexion à un TcpListener sur un thread différent, même processus

[Test] 
    public void Foo() 
    { 
     Thread listenerThread = new Thread(TcpListenerThread); 

     listenerThread.Start(); 

     Thread.Sleep(5000); 

     TcpClient client = new TcpClient(new IPEndPoint(IPAddress.Loopback, 1234));   
    } 

    private void TcpListenerThread() 
    { 
     TcpListener listener = new TcpListener(IPAddress.Any, 1234); 
     listener.Start(); 
     TcpClient socket = listener.AcceptTcpClient(); 
     StreamWriter writer = new StreamWriter(socket.GetStream()); 

     writer.Write(File.ReadAllBytes("../../random file.txt")); 

    } 

Répondre

2

Vous utilisez mal constructeur de la TcpClient - celui-ci lie le client à adresse locale et le port, si vous vous retrouvez à la fois l'auditeur et le client en essayant d'attraper 127.0.0.1:1234. Utilisez le constructeur TcpClient(String, int).

+0

C'était tout, merci! – mattmck

+0

Ou le ctor TcpClient vide et utilisez la méthode TcpClient.Connect – tommed

Questions connexes