2009-03-03 13 views
1

Ich beginne mit Socket-Programmierung mit einem einfachen UDPClient-Programm, um einige Daten zu senden. Der große Code-Schnipsel ist unten:Testen des Socket-Kommunikationsprogramms

using System; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 

class ShowIP 
{ 
    public static void Main(string[] args) 
    { 
     string name = Dns.GetHostName(); 
     //name = "GSL1460"; 
     name = "GSL1296"; 
     try 
     { 
      IPAddress[] addrs = Dns.GetHostEntry(name).AddressList; 
      foreach (IPAddress addr in addrs) 
       Console.WriteLine("{0}/{1}", name, addr); 

      Console.WriteLine("Started listening"); 
      Thread listenerThread = new Thread(new ThreadStart(StartListeningUDP)); 
      listenerThread.Start(); 

      Console.WriteLine("Started sending"); 
      for (int counter = 0; counter <= 3; counter++) 
      { 
       Thread.Sleep(1000); 
       Console.WriteLine("Sending {0} time", counter.ToString()); 
       StartSendingUDP(addrs[0]); 
      } 
      Console.ReadLine(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 

    private static void StartListeningUDP() 
    { 
     UdpClient udpListener = null; 
     IPEndPoint nwPoint = new IPEndPoint(IPAddress.Any, 12345); 

     while (true) 
     { 
      try 
      { 
       udpListener = new UdpClient(12345); 
       Console.WriteLine("Waiting to receive"); 
       Byte[] receivedBytes = udpListener.Receive(ref nwPoint); 
       string receivedData = Encoding.ASCII.GetString(receivedBytes); 

       Console.WriteLine("Data received : " + receivedData); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
      finally 
      { 
       udpListener.Close(); 
      } 
     } 
    } 

    private static void StartSendingUDP(IPAddress clientAddress) 
    { 
     UdpClient udpSender = new UdpClient(); 
     try 
     { 
      Byte[] sendBytes = Encoding.ASCII.GetBytes("Say HI to Papa..."); 

      Console.WriteLine("Data Sent : Say HI to Papa..."); 
      udpSender.Send(sendBytes, sendBytes.Length, new IPEndPoint(clientAddress, 12345)); 
     } 
     finally 
     { 
      udpSender.Close(); 
     } 

    } 
} 

Die Probe auf dem lokalen Rechner funktioniert gut, aber ich bin nicht in der Lage Daten im Intranet an einen anderen Rechner zu senden.

Während des Tests

  • Am den entsprechenden Code uncommenting Daten zu seiner Maschine auf seiner Maschine
  • überprüft
  • leiten den Receiver Bit zu senden, dass der erforderlich Port auf seiner Maschine offen ist

Fehle ich etwas? Bitte vorschlagen.

Antwort

0

Ich bin keine C# Person, also kann ich nicht zu viel auf Ihren Code kommen, aber es sieht im Grunde in Ordnung. Stellen Sie sicher, dass die IP-Adresse, an die Sie senden, auf dem empfangenden Computer korrekt aufgelöst wird.

Überprüfen Sie auch, ob Windows Ihre Internetverbindung blockiert hat und versuchen Sie, die Firewall zu deaktivieren. Und ich weiß, dass Microsoft einige Ideen über "sicheren" Code hat, die uns in der Vergangenheit einige Probleme verursacht haben. Ich habe keine Besonderheiten, aber möglicherweise gibt es im Projekt Einstellungen, die verhindern, dass es auf das Netzwerk zugreifen kann.

1

udpSender.Flush?

0

Der UDP-Listener hört möglicherweise nur auf localhost. Sie könnten versuchen,

udpListener = new UdpClient(12345) 

in StartListeningUDP() zu ersetzen, mit

udpListener = new UdpClient(new IPEndPoint(IPAddress.Any,12345)) 
+0

hat nicht geholfen! Aber danke... – Codex

0

kann man nicht wirklich UDP über das Internet senden, ohne vorher einige Dinge zu tun. Sie werden zu viele UDP-Filter auf dem Weg bekommen. Auch wenn Sie Ihre Firewall deaktivieren, kann Ihr Router-/Provider-Modem so eingestellt werden, dass er sie blockiert. sonst - Ihre Provider-Server werden es blockieren. in der Tat müssen Sie sicherstellen, dass dieser Port für UDP geöffnet ist, genauso wie auf Ihrem localhost es funktioniert nicht, wenn Sie diesen Port in der Firewall öffnen und/oder installieren Sie den Loopback-Adapter

Verwandte Themen