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 UDPTest { /// <summary> /// 接受 /// </summary> public class LabelReceiveService { /// <summary> /// 用於UDP發送的網絡服務類 /// </summary> static UdpClient udpcRecv = null; static IPEndPoint localIpep = null; /// <summary> /// 開關:在監聽UDP報文階段為true,否則為false /// </summary> static bool IsUdpcRecvStart = false; /// <summary> /// 線程:不斷監聽UDP報文 /// </summary> static Thread thrRecv; public static void StartReceive() { if (!IsUdpcRecvStart) // 未監聽的情況,開始監聽 { localIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8899); // 本機IP和監聽端口號 udpcRecv = new UdpClient(localIpep); thrRecv = new Thread(ReceiveMessage); thrRecv.Start(); IsUdpcRecvStart = true; Console.WriteLine("UDP監聽器已成功啟動"); } } public static void StopReceive() { if (IsUdpcRecvStart) { thrRecv.Abort(); // 必須先關閉這個線程,否則會異常 udpcRecv.Close(); IsUdpcRecvStart = false; Console.WriteLine("UDP監聽器已成功關閉"); } } /// <summary> /// 接收數據 /// </summary> /// <param name="obj"></param> private static void ReceiveMessage(object obj) { while (IsUdpcRecvStart) { try { byte[] bytRecv = udpcRecv.Receive(ref localIpep); string message = Encoding.UTF8.GetString(bytRecv, 0, bytRecv.Length); Console.WriteLine(string.Format("{0}[{1}]", localIpep, message)); } catch (Exception ex) { Console.WriteLine(ex.Message); break; } } } }
}
public static void Main(string[] args) { LabelReceiveService.StartReceive(); Console.ReadKey(); }
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 UDPSendTest { class Program { /// <summary> /// 用於UDP發送的網絡服務類 /// </summary> private static UdpClient udpcSend = null; static IPEndPoint localIpep = null; public static void Main(string[] args) { localIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); // 本機IP和監聽端口號 udpcSend = new UdpClient(localIpep); // 實名發送 string msg = null; while ((msg = Console.ReadLine()) != null) { Thread thrSend = new Thread(SendMessage); thrSend.Start(msg); } Console.ReadKey(); } /// <summary> /// 發送信息 /// </summary> /// <param name="obj"></param> private static void SendMessage(object obj) { try { string message = (string)obj; byte[] sendbytes = Encoding.Unicode.GetBytes(message); IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8899); // 發送到的IP地址和端口號 udpcSend.Send(sendbytes, sendbytes.Length, remoteIpep); //udpcSend.Close(); } catch { } } } }