2009-12-18 9 views
0

Je suis nouveau à la programmation réseau, et j'ai un problème avec un code que j'ai testé en tant que base d'un programme de chat LAN.Problème UDP avec non-réception

Code Serveur:

public static void Main() 
    { 

     UdpClient publisher = new UdpClient("230.0.0.1", 8899); 
     UdpClient subscriber = new UdpClient("230.0.0.2", 8800); 
     IPAddress addr = IPAddress.Parse("230.0.0.1"); 
     subscriber.JoinMulticastGroup(addr); 
     Console.WriteLine("Running chat program at 230.0.0.1:8899"); 


     while (true) 
     { 
      IPEndPoint ep = null; 
      byte[] chats = subscriber.Receive(ref ep); 
      string chatstring = Encoding.ASCII.GetString(chats); 
      Console.WriteLine(chatstring); 


      string msg = String.Format(chatstring); 
      byte[] sdata = Encoding.ASCII.GetBytes(msg); 
      publisher.Send(sdata, sdata.Length); 



      System.Threading.Thread.Sleep(500); 
     } 
    } 

Et le programme client:

static void Main(string[] args) 
     { 

      UdpClient subscriber = new UdpClient("230.0.0.1", 8899); 

      IPAddress addr = IPAddress.Parse("230.0.0.1"); 
      subscriber.JoinMulticastGroup(addr); 
      IPEndPoint ep = null; 
      Thread SendChats = new Thread(Send); 
      SendChats.Start(); 
      while (true) 
      { 
       byte[] receivedbytes = subscriber.Receive(ref ep); 
       string receivedchats = Encoding.ASCII.GetString(receivedbytes); 
       Console.WriteLine(receivedchats); 
       Thread.Sleep(500); 
      } 
     } 

     static void Send() 
     { 
      UdpClient publisher = new UdpClient("230.0.0.2", 8800); 



      while (true) 
      { 
       string msg = Console.ReadLine(); 
       byte[] sdata = Encoding.ASCII.GetBytes(msg); 
       publisher.Send(sdata, sdata.Length); 
       Thread.Sleep(400); 
      } 

     } 

Par mon comprendre, le programme serveur DEVRAIT recevoir des données du client, mais hélas, après un message est tapé et livré, il n'y a jamais rien de traverser. Est-ce que je manque quelque chose?

Répondre

1

Votre abonné se trompe-t-il de multidiffusion dans le serveur?

UdpClient subscriber = new UdpClient("230.0.0.2", 8800); 
IPAddress addr = IPAddress.Parse("230.0.0.1"); 
subscriber.JoinMulticastGroup(addr); 

devrait éventuellement être:

IPAddress addr = IPAddress.Parse("230.0.0.2"); 

Aussi - Avez-vous des routeurs/commutateurs entre le client/serveur car ils empêcher le trafic de multidiffusion configuré spécifiquement à moins de le faire.

+0

Prévention par le routeur? Lorsque cela ne fonctionne que entre deux ordinateurs ou plus sur LAN ... ET TY pour le catch. J'ai enlevé l'adresse dans l'abonné, et ai changé la variable d'addr. – Bloodyaugust

+0

Aucun problème. Les problèmes de routeur/commutateur n'interviennent que si vous tentez d'envoyer des paquets de multidiffusion sur différents segments LAN. Si le client et le serveur sont sur le même réseau local, cela n'est pas pertinent. – Paolo