2017-01-12 4 views
1

Я попал в UDP и решил сделать небольшой чат только для практики. У меня возникла проблема, и я не могу понять это сам.C# udp broadcast package не принимается

Я создал две C# консольных программ, которые точно так же (как раз порт отличается)

Я посылаю UDP пакет вещания, а затем хотите получить его на второй консольной программе. Что происходит, так это то, что программа, которую я отправляю в эфир, получает ее, а другая - нет. То же самое происходит наоборот.

Я уже отключил свой брандмауэр -> ничего не меняет.

Я отправляю вам весь код, надеюсь, вы, ребята, можете мне помочь. Мне очень хотелось бы продолжать! Спасибо огромное!

class Program 
{ 
    const int PORT = 10101; 
    private static readonly UdpClient udpclient = new UdpClient(PORT); 
    static void Main(string[] args) 
    { 
     Console.ForegroundColor = ConsoleColor.Red; 
     udpclient.EnableBroadcast = true; 
     //bool for calling async receiver just once 
     bool receiving = false; 
     Console.WriteLine("Chat 2"); 
     //to keep while loop running --> change later 
     bool keepchatting = true; 
     #region keepchating loop 
     while (keepchatting) 
     { 
      if (!receiving) 
      { 
       startlistening(); 
      } 
      receiving = true; 
      newmessage(); 
     } 
    } 
    #endregion 

    //new message --> call sendmessage to broadcast text via UDP 
    public static void newmessage() 
    { 
     string msg; 
     msg = Console.ReadLine(); 
     byte[] message = Encoding.ASCII.GetBytes(msg); 
     sendmessage(message); 
    } 

    //Broadcast text via UDP 
    public static void sendmessage(byte[] tosend) 
    { 
     UdpClient client = new UdpClient(); 
     client.EnableBroadcast = true; 
     IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT); 
     client.Send(tosend, tosend.Length, ip); 
     client.Close(); 
     Console.WriteLine("Sent!"); 
    } 

    static IAsyncResult ar = null; 
    //Setup Async Receive Method 
    public static void startlistening() 
    { 
     ar = udpclient.BeginReceive(RecievedMessage, new object()); 
    } 

    //Message 
    public static void RecievedMessage(IAsyncResult ar) 
    { 
     IPEndPoint ip = new IPEndPoint(IPAddress.Any, PORT); 
     byte[] bytes = udpclient.EndReceive(ar, ref ip); 
     string msg = Encoding.ASCII.GetString(bytes); 
     Console.WriteLine("Received: " + msg); 
     startlistening(); 
    } 

} 
+0

Попробуйте трансляцию с использованием многоадресной передачи IP 224-239. Локальный IP-адрес 255.255.255.255 зарезервирован для определенных протоколов. Я никогда не мог заставить его работать. – jdweng

ответ

0

Недавно я написал приложение, в котором я отправлял сообщения сокетов между двумя приложениями на своем ноутбуке. Я использовал 127.0.0.1 (IP-адрес по умолчанию для локального хоста) для IP-адреса. Не могли бы вы попробовать?

+0

По-прежнему, не работает, но спасибо в любом случае, мой код в порядке или есть какая-то ошибка, вероятно? –

+0

Все выглядит хорошо для меня, но поверьте мне, когда я говорю, что я новичок. У меня есть рабочий UDP-клиент, который я сделал для другого приложения, которое не включает IP-адрес в client.Send() подпись. Кроме того, я никогда не закрываю клиента. Я понимаю, что с UDP не существует способа установления связи с TCP-протоколом. – AClark

1

Я изменил только две части в код, на каждом клиенте установить удаленный номер порта другого клиента, попробуйте следующее:

На одном клиенте:

const int PORT = 10101; 
const int PORT_Remote = 10102; 

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT_Remote); 

На другой клиент:

const int PORT = 10102; 
const int PORT_Remote = 10101; 

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT_Remote); 
Смежные вопросы