我可以通过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后面连接两个对等端,而无需在路由器上启用端口转发 –