UdpReceiver.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace MVMoniter
  10. {
  11. public class UdpReceiver
  12. {
  13. private readonly UdpClient udpClient;
  14. private readonly string ipAddress;
  15. private readonly int port;
  16. private bool isReceiving;
  17. public event EventHandler<string> OnMessageReceived;
  18. public UdpReceiver(string ipAddress, int port)
  19. {
  20. this.ipAddress = ipAddress;
  21. this.port = port;
  22. udpClient = new UdpClient(port);
  23. }
  24. public void StartReceiving()
  25. {
  26. isReceiving = true;
  27. while (isReceiving)
  28. {
  29. try
  30. {
  31. IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ipAddress), port);
  32. byte[] receivedBytes = udpClient.Receive(ref endPoint);
  33. string message = Encoding.UTF8.GetString(receivedBytes);
  34. OnMessageReceived?.Invoke(this, message);
  35. }
  36. catch (Exception ex)
  37. {
  38. // 处理接收异常
  39. Debug.WriteLine($"UDP 接收错误: {ex.Message}");
  40. }
  41. }
  42. }
  43. public void StopReceiving()
  44. {
  45. isReceiving = false;
  46. udpClient.Close();
  47. }
  48. //--------------------------------
  49. }
  50. }