gpt4 book ai didi

c# - 通过广播在 Unity Android 应用程序中接收 UDP 数据包

转载 作者:行者123 更新时间:2023-11-30 01:02:56 25 4
gpt4 key购买 nike

我目前正在创建一个 Unity Android 应用程序 (GearVR),它可以接收通过 Wi-Fi 广播发送的 UDP 数据包。不幸的是,我无法在我的应用程序中收到任何数据包。这是我附加到 3d 游戏对象的脚本。

public class UDPSceneScript : MonoBehaviour {
Thread udpListeningThread;
Thread udpSendingThread;
public int portNumberReceive;
UdpClient receivingUdpClient;

private void initListenerThread()
{
portNumberReceive = 5000;

Console.WriteLine("Started on : " + portNumberReceive.ToString());
udpListeningThread = new Thread(new ThreadStart(UdpListener));

// Run in background
udpListeningThread.IsBackground = true;
udpListeningThread.Start();
}

public void UdpListener()
{
receivingUdpClient = new UdpClient(portNumberReceive);

while (true)
{
//Listening
try
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
//IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Broadcast, 5000);

// Blocks until a message returns on this socket from a remote host.
byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);

if (receiveBytes != null)
{
string returnData = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine("Message Received" + returnData.ToString());
Console.WriteLine("Address IP Sender" + RemoteIpEndPoint.Address.ToString());
Console.WriteLine("Port Number Sender" + RemoteIpEndPoint.Port.ToString());

if (returnData.ToString() == "TextTest")
{
//Do something if TextTest is received
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}

void Start()
{
initListenerThread();
}
}

使用程序 SocketTest 3.0,我将“TextTest”发送到地址 255.255.255.255,端口 5000(我也试过直接定位手机IP,也没用)

提前致谢

最佳答案

对您的代码进行了快速测试,得出的结论是您的客户端代码没有问题。将所有 Console.WriteLine 替换为 Debug.Log,您将收到您正在广播的数据。 Console.WriteLine 不会在 Unity 的控制台中显示任何内容。

如果问题仍然存在,请理解某些操作系统会阻止您向 255.255.255.255 广播。如果是这种情况,请获取您正在广播的设备的 IP,并将最后一个 octet 替换为 255。广播到该 IP 地址,这也将像 255.255.255.255 一样工作。

例如,如果您的 IP 是 192.168.1.13,请将 13 替换为 255。在这种情况下,您应该广播到 192.168.1.255

最后,将下面的代码放在您的客户端脚本中,以确保在您单击编辑器中的“停止”按钮时终止该线程,否则您在开发过程中会遇到很多问题。

 void OnDisable()
{
if (udpListeningThread != null && udpListeningThread.IsAlive)
{
udpListeningThread.Abort();
}

receivingUdpClient.Close();
}

关于c# - 通过广播在 Unity Android 应用程序中接收 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com