C# Unity UDPClient在android构建上未接收广播。编辑工作。目标手机IP有效

C# Unity UDPClient在android构建上未接收广播。编辑工作。目标手机IP有效,c#,android,unity3d,networking,udpclient,C#,Android,Unity3d,Networking,Udpclient,我使用的是非常标准的UDP客户端代码。它在Unity Editor中运行良好。但当我把手机升级到安卓系统时,我没有得到任何回应。发送方是一个经过良好测试的windows程序(我还尝试了其他在线udp发送方),我只构建了一个接收方客户端。发送方处于UDP广播模式,正在发送到255.255.255.255:60888。它在Unity中运行良好,但在手机上构建时,它不会打印任何内容。然而,将发送者切换到手机的直接ip,它工作良好,并打印出数据。我已尝试使用IPAddress.Broadcast/Any

我使用的是非常标准的UDP客户端代码。它在Unity Editor中运行良好。但当我把手机升级到安卓系统时,我没有得到任何回应。发送方是一个经过良好测试的windows程序(我还尝试了其他在线udp发送方),我只构建了一个接收方客户端。发送方处于UDP广播模式,正在发送到255.255.255.255:60888。它在Unity中运行良好,但在手机上构建时,它不会打印任何内容。然而,将发送者切换到手机的直接ip,它工作良好,并打印出数据。我已尝试使用IPAddress.Broadcast/Any/255.255.255/192.168.1.255放置接收端点

它们都在编辑器中工作,但没有一个在android中工作。也尝试了其他端口,并且相同。我从android上读到一些关于多播锁的内容,并尝试过,但没有成功。 一些人建议HTC没有接收广播(特定于硬件)。不过,这款手机(不是HTC)有一个内置视频播放器,可以通过购买udp广播触发。我的发送者可以发送并拉起播放机。我认为这是一个本机应用程序,使用java数据报套接字。我想知道这是Unity bug还是固件bug。 Unity版本:5.6.312017.2.112017.4.2

代码如下:

public class UDPClient : MonoBehaviour {

 Thread receiveThread;
 int remotePort = 60888;
 int clientPort = 60666;
 UdpClient _udpClient;
 // Use this for initialization
 void Start ()
 {
     if (Application.isEditor)
     {
         Application.runInBackground = true;
     }
     _udpClient = new UdpClient(clientPort);
     _udpClient.Client.ReceiveBufferSize = 1024;
     receiveThread = new Thread(new ThreadStart(ReceiveTask));
     receiveThread.Start();


 }

 void ReceiveTask()
 {
     IPEndPoint remoteEP = new IPEndPoint(IPAddress.Broadcast, 0);
     while (true)
     {
         try
         {
             byte[] data = _udpClient.Receive(ref remoteEP);
             if (data != null && data.Length > 0)
             {
                 Debug.Log("received: " + remoteEP.ToString() + " length: " + data.Length + " data: " + data[1].ToString());
             }
             else {
                 Thread.Sleep(10);
             }
         }
         catch (System.Exception ex)
         {
             throw (ex);
         }
     }
 }

 void CleanUp()
 {
     Debug.Log("cleanning Thread");
     if (receiveThread != null)
     {
         receiveThread.Abort();
     }
     receiveThread = null;
     _udpClient.Close();
     _udpClient = null;

 }

 void OnApplicationQuit()
 {
     CleanUp();
 }
}

您的手机本地ip是多少?手机和pc位于同一路由器上。192.168.2.85和192.168.2.114。我想我只是通过标记线程来实现它:receiveThread.IsBackground=true;将
receiveThread.IsBackground
设置为true后,问题是否得到解决是没有意义的。你确定吗?我唯一做的改变就是它在工作,接收广播。这与android网络如何将数据包路由到不同的进程有关吗?如果有人能解释整个跨线程联网的事情,特别是unity如何将c#network编译成android,我会非常感激。我有一个类似的问题(android应用程序没有接收UDP广播消息,而是直接接收UDP消息)。我有'receiveThread.IsBackground=true',它不能解决问题。