Unity UDPClient未在Android构建上接收广播。编辑器的作品。定位电话IP有效

时间:2018-07-06 11:35:12

标签: c# android unity3d networking udpclient

我正在使用非常标准的UDP客户端代码。它在Unity编辑器中工作正常。但是当构建到android手机时,我没有任何反应。发件人是经过良好测试的Windows程序(我也从网上尝试过其他udp发件人),而我仅在构建接收器客户端。发件人处于UDP广播模式,正在发送到255.255.255.255:60888。它在Unity中工作正常,但在手机上构建时,不打印任何内容。但是,如果将发送者切换到电话的ip地址,它就可以正常工作并打印出数据。我尝试将接收端点与IPAddress.Broadcast / Any / 255.255.255.255 / 192.168.1.255放置在一起。

它们都可以在编辑器中工作,但都不能在android中工作。也尝试了其他端口并且相同。我已经从android阅读了有关多播锁定的内容,并尝试了一下,但没有用。 一些建议的HTC没有接收广播(特定于硬件)。但是,电话(不是HTC)具有内置的视频播放器,可以通过购买udp广播来触发它。我的发件人可以发送并拉动播放器。我认为这是一个本机应用程序,并使用Java Datagram Socket。我想知道这是Unity错误还是固件错误。 尝试使用Unity版本:5.6.3,2017.2.1,2017.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();
 }
}

0 个答案:

没有答案