BlueUdp.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using LitJson;
  2. //引入库
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6. using System.Threading;
  7. using UnityEngine;
  8. public class BlueUdp : MonoBehaviour
  9. {
  10. public delegate void logMessagaeBarScanResultDelegat(string message);
  11. public static logMessagaeBarScanResultDelegat logMBSRD;
  12. //以下默认都是私有的成员
  13. string AddressIP;//获取ip
  14. Socket socket; //目标socket
  15. EndPoint serverEnd; //服务端
  16. IPEndPoint ipEnd; //服务端端口
  17. IPEndPoint ipSocketEnd;//蓝牙服务端口
  18. string recvStr; //接收的字符串
  19. string sendStr; //发送的字符串
  20. byte[] recvData = new byte[4096]; //接收的数据,必须为字节
  21. byte[] sendData = new byte[4096]; //发送的数据,必须为字节
  22. int recvLen; //接收的数据长度
  23. Thread connectThread; //连接线程
  24. //初始化
  25. void InitSocket()
  26. {
  27. //192.168.0.155
  28. //定义连接的服务器ip和端口,可以是本机ip,局域网,互联网
  29. ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.3.67"), 9981);
  30. //ipSocketEnd = new IPEndPoint(IPAddress.Parse("192.168.221.89"), 9981);
  31. ipEnd = new IPEndPoint(IPAddress.Parse(AddressIP), 9981);
  32. // ipEnd = new IPEndPoint(IPAddress.Parse("192.168.220.178"), 9981);
  33. //定义套接字类型,在主线程中定义
  34. socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  35. socket.Bind(ipEnd);
  36. //定义服务端
  37. IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
  38. serverEnd = (EndPoint)sender;
  39. //建立初始连接,这句非常重要,第一次连接初始化了serverEnd后面才能收到消息
  40. SocketSend("hello");
  41. //开启一个线程连接,必须的,否则主线程卡死
  42. connectThread = new Thread(new ThreadStart(SocketReceive));
  43. connectThread.Start();
  44. }
  45. void SocketSend(string sendStr)
  46. {
  47. //清空发送缓存
  48. sendData = new byte[4096];
  49. //数据类型转换
  50. sendData = Encoding.ASCII.GetBytes(sendStr);
  51. //发送给指定服务端
  52. socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipSocketEnd);
  53. }
  54. //服务器接收
  55. void SocketReceive()
  56. {
  57. //进入接收循环
  58. while (true)
  59. {
  60. Debug.Log("1111111111111111111");
  61. //对data清零
  62. recvData = new byte[4096];
  63. //获取客户端,获取服务端端数据,用引用给服务端赋值,实际上服务端已经定义好并不需要赋值
  64. recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
  65. //Debug.LogError("message from: " + serverEnd.ToString()); //打印服务端信息
  66. //输出接收到的数据
  67. Debug.Log("2222222222222222222222222");
  68. recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
  69. //print(recvStr+"消息");
  70. Debug.Log(recvStr + "Idear");
  71. TestJsonManage.state = true;
  72. TestJsonManage.result = recvStr.Trim();
  73. //SlamBlueManager.isBQREC = true;
  74. //SlamBlueManager.bQResult = recvStr.Trim();
  75. }
  76. }
  77. //连接关闭
  78. void SocketQuit()
  79. {
  80. //关闭线程
  81. if (connectThread != null)
  82. {
  83. connectThread.Interrupt();
  84. connectThread.Abort();
  85. }
  86. //最后关闭socket
  87. if (socket != null)
  88. socket.Close();
  89. }
  90. // Use this for initialization
  91. void Start()
  92. {
  93. ///获取本地的IP地址
  94. for (int i = 0; i < Dns.GetHostEntry(Dns.GetHostName()).AddressList.Length; i++)
  95. {
  96. if (Dns.GetHostEntry(Dns.GetHostName()).AddressList[i].AddressFamily.ToString() == "InterNetwork")
  97. {
  98. AddressIP = Dns.GetHostEntry(Dns.GetHostName()).AddressList[i].ToString();
  99. }
  100. }
  101. InitSocket(); //在这里初始化
  102. SendIpToBluetooth();//发送targeId,端口号
  103. }
  104. // Update is called once per frame
  105. void Update()
  106. {
  107. }
  108. public void SendIpToBluetooth()
  109. {
  110. SendNetConnectProtocolBlue sendNet = new SendNetConnectProtocolBlue();
  111. sendNet.Tagid = DeviceSN.Instance.SendSerialBy16();
  112. sendNet.Port = 9981;
  113. sendNet.ProjectId = 44;
  114. string jsonData = JsonMapper.ToJson(sendNet);
  115. Debug.Log(jsonData);
  116. SocketSend(jsonData);
  117. }
  118. void OnApplicationQuit()
  119. {
  120. SocketQuit();
  121. }
  122. }