簡體   English   中英

udp數據包未通過

[英]udp packet not coming through

我有以下設置:

專用服務器-> Internet->調制解調器(telenet)->路由器->客戶端

  1. 客戶端啟動與服務器的tcp連接以在服務器上注冊自己,並提供以下信息:
    • 客戶端的mac地址
    • 外部ip; 這是通過使用從whatsmyip.org下載的webclient字符串來檢索的
  2. 服務器上會發生一些更新,並且當然需要通知客戶端,因此客戶端可以自己啟動同步會話:
    • 為了通知客戶端,服務器將udp數據包從服務器發送到調制解調器(發送到外部IP,較早從客戶端接收到) ,同時客戶端正在偵聽路由器后面的udp數據包。

問題是我沒有收到任何數據包。我的情況是否可行,我該怎么辦?

要求:

  • 不能通過在路由器上啟用端口轉發來解決此問題
  • 服務器有固定的IP
  • 有時可以斷開客戶端與互聯網的連接
  • 該解決方案必須適用於不同類型的路由器
  • 發送和接收數據包的兩個端口都相同
  • 所有編程均在C#中完成
  • 當有更新時,服務器會通知客戶端,客戶端可能永遠不會輪詢服務器以獲取更新以防止過載(以防多個客戶端同時執行此操作)

問候大安,並提前致謝

編輯:
來自服務器的代碼示例:

UdpClient udpSender = new UdpClient();
IPEndPoint localServerGateway = new IPEndPoint(IPAddress.Parse(externalIp), 8003);
string message = "testmessage";
byte[] messageBytes = Encoding.ASCII.GetBytes(message);
try
{
     udpSender.Send(messageBytes, messageBytes.Length, localServerGateway);
}
catch (Exception error)
{
     Console.WriteLine("Error while sending message: " + error.ToString());
}
udpSender.Close();

客戶端代碼示例:

private void listenForMasterSyncRequest()
{
        bool done = false;
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 8003);

        try
        {
            while (!done)
            {
                byte[] bytes = masterSyncUdpListener.Receive(ref groupEP);
                handleMessage(bytes, bytes.Length, true); // handles incoming messages, this is never reached because no packets are received :-(
            }

        }
        catch (Exception e)
        {
            Console.WriteLine("An error occured while listening to server broadcast updates: " + e.ToString());
        }
        finally
        {
            masterSyncUdpListener.Close();
        }
    }

NAT通過在外部主機和內部主機之間建立會話來工作。 但是會話必須在內部啟動,在您的情況下,這是客戶端。 因此,它的工作方式是客戶端必須輪詢服務器,將UDP數據包發送到服務器上的特定端口,詢問是否需要同步。 服務器必須將UDP響應從同一端口發送回客戶端發送原始請求的同一端口。 如果以這種方式執行此操作,則來自服務器的數據包將通過,否則將無法通過。 我知道這可行,因為這正是從NAT后面進行DNS查找的方式。

由於您無法控制路徑中的NAT設備,因此這里唯一明智的方法是使用TCP作為主要傳輸方式。

暫無
暫無

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

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