gpt4 book ai didi

c# - UWP App 停止接收 UDP 多播消息

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:02 25 4
gpt4 key购买 nike

我目前遇到了一个非常奇怪的问题。我正在使用 Unity 2017.4.2f2 为 Microsoft HoloLens 开发应用程序。问题是我的代码运行良好,但 HoloLens 在我的应用程序运行几次后不再从我的 python 服务器接收任何 UDP 消息。

这是 DatagramSocket 连接的代码:

private HostName inetAddr;
private DatagramSocket sock;
private int inetPort;
private const int BUFFER_SIZE = 1024;
private byte[] buffer;

private async Task ConnectSocket()
{
sock = new DatagramSocket();
sock.MessageReceived += Socket_MessageReceived;
sock.Control.MulticastOnly = true;
sock.Control.InboundBufferSizeInBytes = BUFFER_SIZE;
await sock.BindServiceNameAsync(inetPort.ToString());
sock.JoinMulticastGroup(inetAddr);
// Send empty message to initialize communication
await SendWithExistingSocket("");
}

private async Task SendWithExistingSocket(string text)
{
if (sock != null)
{
Stream stream = (await sock.GetOutputStreamAsync(inetAddr, inetPort.ToString())).AsStreamForWrite();
using (var writer = new StreamWriter(stream))
{
writer.WriteLine(text);
await writer.FlushAsync();
}
}
}

private async void Socket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
using (Stream streamIn = args.GetDataStream().AsStreamForRead(BUFFER_SIZE))
{
await streamIn.ReadAsync(buffer, 0, BUFFER_SIZE);
}
IPAddress address = IPAddress.Parse(inetAddr.RawName);
IPEndPoint from = new IPEndPoint(address, int.Parse(sender.Information.LocalPort));
//Custom function for dealing with packet
HandlePacket(buffer, from);
}

正如我所说,这个问题很奇怪,因为这段代码确实有效,直到 HoloLens 停止接收 UDP 数据报(函数 Socket_MessageReceived 未调用)。在我的示例中 inetAddr = 224.3.0.5 和 inetPort = 7667

需要补充的是,我的应用在从设备门户重新启动 HoloLens 之后重新开始接收 UDP 消息。

当我在我的本地机器上部署我的 UWP 应用程序时,我没有遇到这个问题。仅当我将我的应用程序部署到 HoloLens 时。我还有一个与 UdpClient 类(用于在编辑器中进行测试)的这种通信的实现,它工作得很好并且不像这样。

我已经尝试过的:

  • 检查任何必要的能力(互联网客户端和服务器、专用网络客户端和服务器)
  • 更改多播地址/监听端口
  • 使用 WireShark 检查网络(来自服务器的消息已正确发送)
  • 退出应用程序时调用 socket.Dispose()

有什么想法吗?谢谢你

最佳答案

不要将 Using 与您的编写者和接收者一起使用,因为这会破坏与您的听众的交流。我有那个问题,在我这样做之前它让我发疯。现在它就像一个魅力。

我收到这样的包裹:

bool refresh = false;
bool sound = false;
string response;
uint stringLength = args.GetDataReader().UnconsumedBufferLength;
response = args.GetDataReader().ReadString(stringLength);

然后像这样写包:

IOutputStream outputStream;
HostName remoteHostname = new HostName("224.3.0.5");

outputStream = await socketinstance.GetOutputStreamAsync(remoteHostname, ClientPortNumber);

DataWriter writer = new DataWriter(outputStream);
writer.WriteString(request);
await writer.StoreAsync();

关于c# - UWP App 停止接收 UDP 多播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566433/

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