《客戶端》
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace _023_socket_udp_客戶端
{
class Program
{
static void Main(string[] args)
{
//1.創建socket
Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//2.發送數據
EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("14.197.42.119"), 7788); //4.這是為了創建一個終結點里面包含了ip地址和端口號
string message = Console.ReadLine(); //2.這個是獲取用戶輸入了什么數據類型是字符串
byte[] data = Encoding.UTF8.GetBytes(message); //3.這個是將用戶輸入的字符串轉化成byte類型的數組然后帶入到第一步中的參數中去發送給服務端
int length = udpClient.SendTo(data,serverPoint); //1.啟動發送數據的函數,但是得傳入一個用戶輸入的數據類型是byte的參數,然后傳入的第二個參數是用來指定一個IP地址和端口號我們稱之為終結點
Console.ReadKey();
}
}
}
《服務端》
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace _023_socket_udp_服務端
{
class Program
{
static void Main(string[] args)
{
//1.創建Socket
Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//2.綁定IP地址和端口號
udpServer.Bind(new IPEndPoint(IPAddress.Parse("14.197.42.119"),7788));
//3.接受數據
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any,0); //3.創建一個不需要指定的IP和端口號傳遞到第一步的第二個參數,這個參數不需要賦值等到接受信息的時候才會給它賦值
byte[] data = new byte[1024]; //2.創建一個容器給第一步中第一個數據參數使用
int length = udpServer.ReceiveFrom(data, ref remoteEndPoint); //1.傳入一個byte類型的數組作為容器來儲存接收到的信息和一個不需要指定的IP和端口號的信息 ref關鍵字表示這個方法可以對ref后面的屬性修改信息
//4.顯示出來數據
string message = Encoding.UTF8.GetString(data, 0, length); //1.將接收到的byte類型的數組信息data轉化為string類型的信息存儲在message對象中
Console.WriteLine("從IP{0}和端口號{1}中收到了信息", (remoteEndPoint as IPEndPoint).Address.ToString(), (remoteEndPoint as IPEndPoint).Port); //2.輸出信息來源 標注:因為remoteEndPoint是需要轉換類型的所以記得加括號
udpServer.Close(); //3.接受完數據和顯示完數據以后我們需要自動清除數據釋放內存
Console.ReadKey();
}
}
}