2009-03-03 2 views
1

Я начинаю с программирования сокетов с помощью простой программы UDPClient для отправки некоторых данных. Большой фрагмент кода ниже:Тестирование программы связи сокетов

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(); 
     } 

    } 
} 

образец отлично работает на локальной машине, но я не в состоянии передавать данные на другой машине в сети.

Во время тестирования

  • Am раскомментировать соответствующий код для отправки данных на свою машину
  • бегает бит приемника на его машине
  • проверили, что требуемый порт открыт на его машине

Я что-то упустил? Пожалуйста, предложите.

ответ

0

Я не человек C#, поэтому я не могу слишком много комментировать ваш код, но он выглядит в основном в порядке. Убедитесь, что IP-адрес, который вы отправляете, правильно разрешен для вашего принимающего устройства.

Кроме того, посмотрите, работает ли Windows с вашим интернет-соединением, и попробуйте отключить брандмауэр, если это так. И я знаю, что у Microsoft есть некоторые идеи о «безопасном» коде, которые вызвали у нас некоторые проблемы в прошлом. У меня нет никаких особенностей, но в проекте могут быть настройки, которые не позволяют ему получить доступ к сети.

0

UDP-прослушиватель может прослушивать только локальный хост. Вы можете попробовать заменить

udpListener = new UdpClient(12345) 

в StartListeningUDP() с

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

Пробовал, не помогло! Но спасибо... – Codex

0

вы не можете послать UDP через Интернет, не делая несколько вещей, прежде чем. вы получите слишком много фильтров udp по пути. , даже если вы отключите брандмауэр, ваш модем маршрутизатора/провайдера может быть настроен на его блокировку. else - серверы вашего провайдера заблокируют его. , так что на самом деле вам нужно будет убедиться, что этот порт открыт для UDP, так же как и на вашем локальном хосте, он не будет работать, если вы не откроете этот порт в брандмауэре и/или не установите loopback-адаптер.