[英]udp packet not coming through
我有以下設置:
專用服務器-> Internet->調制解調器(telenet)->路由器->客戶端
問題是我沒有收到任何數據包。我的情況是否可行,我該怎么辦?
要求:
問候大安,並提前致謝
編輯:
來自服務器的代碼示例:
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.