簡體   English   中英

如何從遠程 UDP 插座獲取信息? C# & IPv4

[英]How to get information from a remote UDP socket? C# & IPv4

我有硬件以大約 5 秒的間隔向地址192.168.0.255發送信息(在下圖中,Wireshark 軟件顯示了 IP 地址為 192.168.0.241 的設備,將消息“ Hallo ”發送到端口 7000 上的地址 192.168.0.255 ):

在此處輸入圖像描述

另一方面,我有一個用 C # 制作的桌面應用程序,它嘗試按如下方式讀取該信息:

int PORT = 7000;
udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));


private async Task<string> getData()
{
   try
   {
        var from = new IPEndPoint(0, 0);
        while (true)
        {
           var recvBuffer = udpClient.Receive(ref from);
           string result= Encoding.UTF8.GetString(recvBuffer);
           if (result != null && resultado.Length > 0)
           {
               return result;
           }
        }
   }
   ...
}

它不起作用(udpClient.Receive 永遠不會返回信息,這類似於還沒有套接字信息),但是如果我從我的 PC 上打開一個允許我將信息寫入 UDP scoket 的軟件工具,則代碼有效奇妙(udpClient.Receive 捕獲發送的信息。)

在此處輸入圖像描述

有什么建議或意見嗎?

    UdpClient client;
    IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, PORT);

private void Connect()
{
    client = new UdpClient(7000);
    client.Connect(endPoint);
    client.BeginReceive(ReceiveCallback, null);
}

    private void ReceiveCallback(IAsyncResult _result)
    {
        try
        {
            byte[] _data = client.EndReceive(_result, ref endPoint);
            socket.BeginReceive(ReceiveCallback, null);

            if (_data.Length < 4)
            {
                //disconnected
                return;
            }
    //now data is anything received and if you want to view it as a string do:
    string result = Encoding.Default.GetString(data);
    //you can also convert it to other things like ints, float, etc
        }
        catch
        {
            //disconnected
        }
    }

感謝@MarkusSafar 的建議,我將桌面應用程序放在另一台 PC 上,並從那里設法捕獲硬件消息。 我不確定為什么它不能在我的 PC 上運行,但下一步是測試為 Android (Xamarin) 開發的應用程序的相同代碼,我希望它也能在那里工作。

暫無
暫無

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

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