C# Unity UDPClient在android构建上未接收广播。编辑工作。目标手机IP有效
我使用的是非常标准的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 代码如下: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
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',它不能解决问题。