UDP(User Datagram Protocol)协议就是“用户数据报协议”,它是一种无连接的协议,无连接主要是和TCP协议相比较的。我们知道当利用TCP协议传送数据的时候,首先必须先建立连接(也就是所谓的握手)才可以传输数据。而当计算机利用UDP协议进行数据传输的时候,发送方只需要知道对方的IP地址和端口号就可以发送数据,而并不需要进行连接。
由于UDP协议并不需要进行确定的连接,所以编写基于UDP协议的应用程序比起编写基于TCP协议的应用程序要简单些(程序中可以不需要考虑连接和一些异常的捕获工作)。但同时也给基于UDP协议编写的程序带来了一个致命的缺点,UDP由于不提供可靠数据的传输,当计算机之间利用UDP协议传送数据的时候,发送方只管发送数据,而并不确认数据是否被对方接收。这样就会导致某些UDP协议数据包在传送的过程中丢失,尤其网络质量不令人满意的情况下,丢失数据包的现象会更严重。这就是为什么在网络上传输重要数据不采用UDP协议的原因。
但对于那些不重要的数据,或者即使丢失若干数据包也不影响整体性的数据,如音频数据,视频数据等,采用UDP协议就是一个非常不错的选择。UDP协议无法保证数据可靠性,但具有对网络资源开销较小,数据处理速度快的优点,所以在有些对数据安全性要求不是很高的情况下,采用UDP协议也是一个非常不错的选择。
1.Visual C#使用UdpClient类发送UDP数据包:
IPAddress HostIP = new IPAddress.Parse ( "远程计算机IP地址" ) ;
IPEndPoint host = new IPEndPoint ( HostIP , 8080 ) ;
UdpClient.Send ( "发送的字节" , "发送的字节长度" , host ) ;
2.Visual C#使用UdpClient类接收UDP数据包:
server = new UdpClient ( ) ;
receivePoint = new IPEndPoint (new IPAddress ( "127.0.0.1" ) , 8080 ) ;
byte[] recData = server.Receive ( ref receivePoint ) ;
以上摘自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/224/23990.htm
以下是用UDP协议编写的一个客户端程序:
static void Main()
{
UdpClient udpClient;
try
{
int port = 1080;
IPAddress ip = IPAddress.Parse("192.168.0.64");
IPEndPoint remoteHost = new IPEndPoint(ip,port);
udpClient = new UdpClient(remoteHost); //创建UDP客户端(注意:用到IP和Port),此句为程序关键
udpClient.Connect(remoteHost); //用UDP实例进行连接
Console.WriteLine("Starting…");
while (udpClient != null)
{
try
{
Console.WriteLine("waiting for connection…");
byte[] buf = udpClient.Receive(ref remoteHost); //用UDP实例接收数据(也可用.Send发送数据)
string bufs = Encoding.Default.GetString(buf, 0, buf.Length); //byte转为string
Console.WriteLine("Host:" + remoteHost.Address.ToString() + "rn"+
"Port:" + remoteHost.Port.ToString() + "rn"+
"Data length:" + buf.Length.ToString()+"rn");
Console.WriteLine(bufs); //显示接收的数据
}
catch (Exception y)
{
Console.WriteLine(y.Message);
}
}
Console.WriteLine("Ending…");
udpClient.Close(); //通信完后关闭
}
catch (Exception y)
{
Console.WriteLine(y.Message);
}
}
红色标出了重要的对象及方法;蓝色标出了重要的类;白色为运行后显示的内容。