我正在使用非常标准的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();
}
}