• c#一个udp代码


    不使用socket进行

    unity下的

    1. private Thread connectThread;
    2. private UdpClient udpClient;
    3. public Queue LogQueue = new Queue();
    4. public static UDPManager Instance{get;private set;}
    5. private void Awake()
    6. {
    7. Instance = this;
    8. }
    9. private void Start()
    10. {
    11. udpClient = new UdpClient();
    12. udpClient.EnableBroadcast = true;
    13. connectThread = new Thread(new ThreadStart(SocketReceive));
    14. Thread.Sleep(1000);
    15. connectThread.Start();
    16. }
    17. private void Update()
    18. {
    19. SendMessanger();
    20. }
    21. void SocketReceive()
    22. {
    23. UdpClient udpClient = new UdpClient(6900);
    24. try
    25. {
    26. while (true)
    27. {
    28. IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
    29. while (true)
    30. {
    31. byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);
    32. string recvStr = Encoding.UTF8.GetString(recvData);
    33. LogQueue.Enqueue(recvStr);
    34. }
    35. }
    36. }
    37. catch (Exception)
    38. {
    39. throw;
    40. }
    41. finally
    42. {
    43. udpClient.Close();
    44. }
    45. }
    46. void SendMessanger()
    47. {
    48. if (LogQueue.Count <= 0) return;
    49. string strArray = LogQueue.Dequeue() as string;
    50. if (strArray!=null)
    51. {
    52. Debug.Log(strArray);
    53. }
    54. }
    55. public void SendAllStart(string content)
    56. {
    57. byte[] bytes = Encoding.UTF8.GetBytes(content);
    58. udpClient.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Loopback, 6910));
    59. }

    c#其他下使用:

    1. public partial class NetSever
    2. {
    3. private static NetSever instance;
    4. public static NetSever Instance
    5. {
    6. get
    7. {
    8. if (instance == null)
    9. {
    10. instance = new NetSever();
    11. }
    12. return instance;
    13. }
    14. }
    15. static UdpClient udpClient;
    16. static int connectPort;
    17. public static Queue LogQueue = new Queue();
    18. static IPAddress remoteIP = IPAddress.Parse("127.0.0.1");
    19. IPEndPoint remotePoint = new IPEndPoint(remoteIP, connectPort);//实例化一个远程端点
    20. //网络端口唤醒
    21. public void Init()
    22. {
    23. //初始化协议
    24. if (GetIP() == "")
    25. {
    26. Console.WriteLine ("当前IP地址不存在,或没有信号进行连接!");
    27. return;
    28. }
    29. udpClient = new UdpClient();
    30. udpClient.EnableBroadcast = true;
    31. connectPort = 6900;
    32. //添加事件订阅信息
    33. AddEventNeight();
    34. 开启一个线程
    35. Task task = new Task(SocketReceive);
    36. task.Start();
    37. }
    38. private void AddEventNeight()
    39. {
    40. }
    41. string GetIP()
    42. {
    43. //本机名
    44. string hostName = Dns.GetHostName();
    45. //会返回所有地址,包括IPv4和IPv6
    46. IPAddress[] addressList = Dns.GetHostAddresses(hostName);
    47. foreach (IPAddress ip in addressList)
    48. {
    49. if (ip.AddressFamily == AddressFamily.InterNetwork)
    50. {
    51. return ip.ToString();
    52. }
    53. }
    54. return "127.0.0.1";
    55. }
    56. static void SocketReceive()
    57. {
    58. UdpClient client = null;
    59. string receiveString = null;
    60. //实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点
    61. IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
    62. //NetSever.Instance.SendAllStart("网络开启");
    63. UdpClient udpClient = new UdpClient(6910);
    64. try
    65. {
    66. while (true)
    67. {
    68. IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
    69. while (true)
    70. {
    71. byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);
    72. receiveString = Encoding.UTF8.GetString(recvData);
    73. string[] date = null;
    74. if (receiveString.Contains("\r\n"))
    75. {
    76. receiveString = receiveString.TrimEnd((char[])"\r\n".ToCharArray());
    77. }
    78. if (receiveString.Contains("010"))
    79. {
    80. date = receiveString.Split('-');
    81. receiveString = "010";
    82. }
    83. if (receiveString.Contains("openFile"))
    84. {
    85. date = receiveString.Split('-');
    86. receiveString = "openFile";
    87. }
    88. switch (receiveString)
    89. {
    90. case "Text":
    91. Console.WriteLine("网络端口测试!!!已收到信息");
    92. NetSever.Instance.SendAllStart("网络已打开");
    93. break;
    94. }
    95. }
    96. }
    97. }
    98. catch (Exception)
    99. {
    100. //NetSever.Instance.SendAllStart("网络已打开");
    101. throw;
    102. }
    103. finally
    104. {
    105. udpClient.Close();
    106. }
    107. }
    108. //发送端口
    109. public void SendAllStart(string content)
    110. {
    111. byte[] bytes = Encoding.UTF8.GetBytes(content);
    112. UdpClient udpClient = new UdpClient();
    113. try
    114. {
    115. udpClient.Connect("127.0.0.1", 6900);
    116. udpClient.Send(bytes, bytes.Length);
    117. }
    118. catch (Exception ex)
    119. {
    120. Console.WriteLine(ex.ToString());
    121. }
    122. }

    至于为啥这么写,只能说经验之谈

  • 相关阅读:
    【Web漏洞探索】跨站脚本漏洞
    CTO与CIO选型数据中台的几大建议
    开源项目datavines内存泄漏问题分析
    app自动化测试
    linux基础:4:gdb的使用
    大数的乘法
    如何看待“低代码”开发平台的兴起?
    【开源教程12】疯壳·开源编队无人机-串口(视觉数据获取)
    redis 管道(pipeline),深入解读
    Leetcode刷题【hot100】最长连续序列
  • 原文地址:https://blog.csdn.net/qq_46043095/article/details/139814159