簡體   English   中英

c#udp廣播包收不到

[英]c# udp broadcast package not receiving

我進入了 UDP 並決定做一個小聊天,只是為了練習。 我遇到了一個問題,我自己無法解決。

我創建了兩個完全相同的 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();
    }

}

我只更改了您的代碼的兩部分,在每個客戶端上設置另一個客戶端的遠程端口號,試試這個:

在一個客戶端上:

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

我最近寫了一個應用程序,我在筆記本電腦上的兩個應用程序之間來回發送套接字消息。 我使用 127.0.0.1(本地主機的默認 IP 地址)作為 IP 地址。 你可以試試嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM