![](/img/trans.png)
[英]Receiving UDP Multicast Messages on a Multihomed Windows 10 Machine
[英]UWP App stops receiving UDP Multicast messages
我目前遇到一個非常奇怪的問題。 我正在使用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類(用於在編輯器中進行測試)實現了這種通信的實現,該類工作得很好,並且行為並非如此。
我已經嘗試過的
有什么想法嗎? 謝謝
不要與作家和接收者一起使用“ 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.