這不是問題,而是好奇心。我使用UDP創建了一個簡單的發送/接收C#應用程序,主要遵循UdpClient上的MSDN示例。我有一個文本框用作發送或接收事件的日誌;它打印時間戳以及從哪裏發送/接收的內容。當收到UDP數據包時,該端口與監聽端口不匹配
好奇心帶着端口號進來。當程序在某個端口上偵聽並收到一個數據包時,收到的數據包上的端口與它正在偵聽的端口不匹配。
例如,這裏的應用程序的截圖(注:這即使使用不同的電腦發送仍然發生/接收):
它接收到的數據包就好了,這就是爲什麼並不是真正的「問題」,因爲它正在工作。我只是好奇爲什麼收到的數據包上的端口顯示不同於它正在監聽的端口。我想知道如果也許它只是垃圾數據?
下面是當接收數據(使用我從MSDN拿起的AsyncCallback)運行的代碼:
private void ReceiveCallback(IAsyncResult ar)
{
try {
// Pull the socket from the AsyncResult parameter
UdpState state = (UdpState)(ar.AsyncState);
UdpClient udp = state.udp;
IPEndPoint end = state.endpoint;
// Grab and convert the message into a string
byte[] recvBytes = udp.EndReceive(ar, ref end);
string recvString = Encoding.ASCII.GetString(recvBytes);
/* Here's where it's logging the IPEndPoint onto the console.
* Is the port meaningless when receiving a packet, and that's why it's
* always something random? Or is there some meaning to it that I'm
* unaware of? */
ConsoleLog(end.ToString() + " Recv: " + recvString);
// Start the listen cycle again so this will be called again
listener.BeginReceive(new AsyncCallback(ReceiveCallback), state);
} catch (ObjectDisposedException) {
// Do nothing - Expected error when the UDP Listener is closed.
}
}
正在接收數據包時,只是毫無意義的垃圾數據的端口號,或者它有某種使用?
的通信信道作爲一個IP地址和端口對,你看到的客戶端端口是從必須預先知道服務器端口不同讓客戶知道向哪裏發送到的每個端部。 – BhavO