У меня сейчас очень странная проблема.Я разрабатываю приложение для Microsoft HoloLens с Unity 2017.4.2f2.Проблема в том, что мой код работает хорошо, но HoloLens просто не получит больше UDP-сообщений от моего сервера python после нескольких запусков моего приложения.
Вот код для соединения 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
Важно добавить, что мое приложение перезапускает получение UDP-сообщений после перезагрузки HoloLens с портала устройства .
У меня нет этой проблемы при развертывании приложения UWP на локальном компьютере.Только когда я развертываю свое приложение на HoloLens.У меня также есть реализация этого взаимодействия с классом UdpClient (для тестирования в редакторе), который работает очень хорошо и ведет себя не так.
Что я уже пробовал:
- Проверка всех необходимых возможностей (Интернет-клиент и сервер, Клиент и сервер частной сети)
- Изменение адреса многоадресной рассылки / порта прослушивания
- Проверка сети с помощью WireShark (сообщения с сервера отправляются правильно)
- Вызов socket.ispose () при выходе из приложения
Есть идеи почему?Спасибо