2010-11-17 11 views
0

J'essaie de faire une simple application UDP en utilisant C sharp, rien de sophistiqué, se connecter, envoyer du texte, et le recevoir! mais il continue à jeter cette exception!Client UDP en C#

"Une connexion existante a été fermée de force par l'hôte distant"!

Le code:

 byte[] data = new byte[1024]; 
    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050); 

    Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 

    string welcome = "Hello, are you there?"; 
    data = Encoding.ASCII.GetBytes(welcome); 
    server.SendTo(data, data.Length, SocketFlags.None, ipep); 

    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); 
    EndPoint tmpRemote = (EndPoint)sender; 

    data = new byte[1024]; 
    int recv = server.ReceiveFrom(data, ref tmpRemote); 

    Console.WriteLine("Message received from {0}:", tmpRemote.ToString()); 
    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 



    Console.WriteLine("Stopping client"); 
    server.Close(); 

merci =)

+0

sonne comme le serveur en écoutant le point final est en train de mourir –

Répondre

0

Avez-vous essayé vérifiez que l'adresse IP est valide et le port n'est pas utilisé pour autre chose?

Fenêtres:

Démarrer> Exécuter> "cmd"> "ipconfig".

+0

oui! même exception! – user511023

0

Essayez d'éteindre votre logiciel de pare-feu.

+0

Comment cela aide-t-il lorsque le point de terminaison cible est 127.0.0.1? –

+0

Il ne devrait pas, sauf s'il a un pare-feu tiers étrange installé. C'est quelque chose à éliminer de toute façon. – rboarman

2

Vous devez indiquer au système que vous écoutez des paquets UDP sur le port 9050 avant d'appeler Recevoir. Ajouter server.Bind(ipep); après Socket server = new Socket(...);

0

Si vous ne connaissez pas l'adresse IP du serveur de réponse, vous feriez mieux de le faire: recv = server.Receive(data);

Voici mon suggetion à votre code. Vous pouvez utiliser une boucle do-tout en utilisant une condition (dans mon exemple, il est une boucle infinie):

 byte[] data = new byte[1024]; 
     IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050); 

     Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 

     string welcome = "Hello, are you there?"; 
     data = Encoding.ASCII.GetBytes(welcome); 
     server.ReceiveTimeout = 10000; //1second timeout 
     int rslt = server.SendTo(data, data.Length, SocketFlags.None, ipep); 

     data = new byte[1024]; 
     int recv = 0; 
     do 
     { 
      try 
      { 
       Console.WriteLine("Start time: " + DateTime.Now.ToString()); 
       recv = server.Receive(data); //the code will be stoped hier untill the time out is passed 
      } 
      catch { } 
     } while (true); //carefoul! infinite loop! 

     Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 
     Console.WriteLine("Stopping client"); 
     server.Close();