
Socket(套接字)編程(Udp)
基於Udp協議是無連接模式通訊,占用資源少,響應速度快,延時低。至於可靠性,可通過 應用層的控制來滿足。(不可靠連接)
(1).建立一個套接字(Socket)
(2).綁定服務器端IP地址及端口號--服務器端
(3).通過SendTo()方法向指定主機發送消息 (需提供主機IP地址及端口)
(4).通過ReciveFrom()方法接收指定主機發送的消息 (需提供主機IP地址及端口)
TCP和UDP的區別
TCP協議和UDP協議連接過程的區別
1.基於連接與無連接;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程序結構較簡單;
4.流模式與數據報模式 ;
5.TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證。
UDP服務器端:
1 using System; 2 using System.Net; 3 using System.Net.Sockets; 4 using System.Text; 5 6 namespace _29_UDP服務器端 7 { 8 internal class Program 9 { 10 static void Main(string[] args) 11 { 12 13 Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 14 15 IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 31, 17 }); 16 // IP + Port 17 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 7788); 18 19 udpServer.Bind(ipEndPoint); 20 //任何人都可以發送消息 21 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 0); 22 EndPoint ep = (EndPoint)ipep; 23 byte[] data = new byte[1024]; 24 int length = udpServer.ReceiveFrom(data, ref ep); 25 26 Console.WriteLine("接收到數據:" + Encoding.UTF8.GetString(data, 0, length)); 27 28 udpServer.Close(); 29 } 30 } 31 }
UDP客戶端:
1 using System; 2 using System.Net.Sockets; 3 using System.Net; 4 using System.Text; 5 6 namespace UDP客戶端 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //(SocketType.Dgram)數據包形式發送 13 Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 14 IPAddress iPAddress = new IPAddress(new byte[] { 192, 168, 1, 184 }); 15 IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 6688); 16 //消息轉碼為byte 17 byte[] data = Encoding.UTF8.GetBytes("客戶端上線了"); 18 //強轉iPEndPoint為EndPoint 19 EndPoint ep = (EndPoint)iPEndPoint; 20 //發送消息 21 udpClient.SendTo(data, ep); 22 } 23 } 24 }
