我可以通過UdpClient.Send(字節數組)或UdpClient.Client.Send(stream)方法在整個udp協議中發送數據。兩種方法都有效。唯一的區別是在一個方法中,我傳遞一個字節數組,另一個傳遞一個流。UdpClient.Send方法和UdpClient.Client.Send方法之間的區別
簡單的例子:
UdpClient udpClient = new UdpClient(localEndPoint);
// I can eather send data as:
udpClient.Send(new byte[] { 0, 1, 2 }, 3);
udpClient.Client.Send(new byte[5]);
而且該方法將保證我的數據到達它的目的地,沒有信息丟失?我已經讀過udp協議不能確保所有字節到達它的目的地,因此對於流式視頻,音頻更好,而不是像我正在做的那樣傳輸文件。我使用udp而不是tcp的原因是因爲在恰好位於路由器後面的兩個用戶之間建立tcp連接非常複雜。我知道如果其中一個用戶在他的路由器上啓用端口轉發,這將是可能的。我設法通過做所謂的udp punch holing來發送數據。 udp punch holing使您能夠藉助服務器在路由器後面的兩個用戶之間建立連接。如果你在谷歌這裏能夠找到很多信息,那麼解釋在這裏的工作將會很長。反正我只是想讓你知道我爲什麼用udp代替tcp。我現在不能用這個協議發送文件,確保沒有數據丟失。也許我必須創建一個算法。或者UdpClient.Client.Send方法可以確保數據將被接收,並且UdpClient.Send方法不能確保數據將被接收。
我希望我可以使用tcp。我無法在nat後面的兩個用戶之間建立tcp連接。通過在服務器的幫助下完成udp打孔操作,我已經能夠通過udp完成這項工作。也許我可以用ftp等其他協議來打孔。我的意思是,我想用udp來做這件事的原因是它是唯一的協議,它使我能夠在nat後面連接兩個對等端,而無需在路由器上啓用端口轉發 –