UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是 一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,与TCP不同的是,UDP是面向无连接的,它没有TCP传输前的“三次握手”的机制,是一种不可靠的传输机制。。
我们再来看看用UDP实现小聊天程序吧,,,
同TCP一样,UDP同样需要一个服务器端和一个客户端来模拟对话,我们就用两个控制台应用程序实现,首先我们来搭建服务器端,贴上代码:
UDP服务器端Socket
//第一步 定义一个Socket
Socket socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//第二步 设置一个网络节点
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8888);
//将socketServer绑定到网络节点上
socketServer.Bind(endPoint);//【Tcp的时候需要监听 但DUP不需要监听】
//socketServer.Listen(10);//输出一句话 提示服务已开启
Console.WriteLine("===UDP Server Is OK===\r\n IP:" + endPoint.Address + " Port:" + endPoint.Port);
UDP客户端
//第一步 建立一个Socket
Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//第二步 通过套接字收发报文
Console.WriteLine("按任意键 开始向服务器发送数据");
Console.ReadKey();byte[] data = new byte[1024 * 1024];
string input, stringData;IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
data = Encoding.UTF8.GetBytes("Hello Server,My Name Is HolyKnight_UdpClient");//将数据发送到服务器的终结点
socketClient.SendTo(data, endPoint);//定义一个发送终结点,没有具体的IP和Port
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);//定义一个网络地址
EndPoint Remote = (EndPoint)sender;//重新实例化一个字节数组 用于存放接受到的数据
data = new byte[1024 * 1024];
//接受数据 将数据保存到data数据 将远程主机的节点保存到Remote终端中【注意ref引用】
int receive = socketClient.ReceiveFrom(data,ref Remote);Console.WriteLine("Message Receive From {0}", Remote.ToString());
Console.WriteLine(Encoding.UTF8.GetString(data, 0, receive));//循环收发数据
while (true)
{
//从键盘读取数据
input = Console.ReadLine();
if (input == "exit")
{
break;
}
//同样的发送数据到Remote节点
socketClient.SendTo(Encoding.UTF8.GetBytes(input),Remote);
data = new byte[1024 * 1024];//同样的接受数据 并再次更新存储终结点
receive = socketClient.ReceiveFrom(data,ref Remote);
stringData = Encoding.UTF8.GetString(data, 0, receive);Console.WriteLine("服务器说:" + stringData);
}//关闭套接字
Console.WriteLine("Stopping Client");
socketClient.Close();
Console.ReadKey();
}
这篇文档对您是否有帮助?