基於Udp協議是無鏈接模式通信,佔用資源少,響應速度快,延時低。至於可靠性,可經過應用層的控制來知足。(不可靠鏈接)編程
使用Udp協議通信須要具有如下幾個條件:服務器
(1).創建一個套接字(Socket)socket
(2).綁定服務器端IP地址及端口號--服務器端spa
(3).經過SendTo()方法向指定主機發送消息 (需提供主機IP地址及端口)3d
(4).經過ReciveFrom()方法接收指定主機發送的消息 (需提供主機IP地址及端口)code
下面用代碼實現簡單的服務器---客戶端通訊server
服務器端:blog
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace _023_socket編程_UDP協議_服務器端 { class Program { private static Socket udpServer; static void Main(string[] args) { //1,建立socket udpServer = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); //2,綁定ip跟端口號 udpServer.Bind( new IPEndPoint( IPAddress.Parse("192.168.1.101"),7788 ) ); //3,接收數據 new Thread(ReceiveMessage){ IsBackground = true}.Start(); Console.WriteLine("服務器啓動..."); Console.ReadKey(); } static void ReceiveMessage() { while (true) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); byte[] data = new byte[1024]; int length = udpServer.ReceiveFrom(data, ref remoteEndPoint);//這個方法會把數據的來源(ip:port)放到第二個參數上 string message = Encoding.UTF8.GetString(data, 0, length); Console.WriteLine("從ip:" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "收到了數據:" + message); } } } }
客戶端:ip
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace _002_socket編程_udp協議_客戶端 { class Program { static void Main(string[] args) { //建立socket Socket udpClient = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp); while (true) { //發送數據 EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 7788); string message = Console.ReadLine(); byte[] data = Encoding.UTF8.GetBytes(message); udpClient.SendTo(data, serverPoint); } udpClient.Close(); Console.ReadKey(); } } }
執行過程:ci
(1)啓動服務器
(2)啓動客戶端,並向服務器發送數據