Я попал в 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();
}
}
Попробуйте трансляцию с использованием многоадресной передачи IP 224-239. Локальный IP-адрес 255.255.255.255 зарезервирован для определенных протоколов. Я никогда не мог заставить его работать. – jdweng