ReceiveFromAsyn c () не работает под платформой iOS в Xamarin. Кросс-платформенный прием данных UDP - PullRequest
0 голосов
/ 09 марта 2020

Я работаю с Xamarin.Forms на отправку / получение пакета UDP. ниже приведены краткие коды, сообщение отправляется на дальний конец и возвращается сообщение Udp, захваченное событием ReceiveFromAsync().

во время тестирования. Оно работает хорошо в среде Andriod, однако на платформе iOS, ReceiveFromAsync() НЕ запускается.

Я использую VS2019 16.4.5 с Xamarin.Forms 4.3.0.908675.

Кто-нибудь встречался с таким случаем ранее? я ценю, что ты пролил немного света на это.

var udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpSocket.Bind(localIpEndpoint);
udpSocket.Connect(cloudServer, cloudPort);
udpSocket.Send(mesgBytes);

SocketAsyncEventArgs udpSocketEventHandler;
byte[] buffer = new byte[1024];

udpSocketEventHandler = new SocketAsyncEventArgs();
udpSocketEventHandler.RemoteEndPoint = remoteIpEp;
udpSocketEventHandler.Completed += udpSocketEventHandler_Completed;
udpSocketEventHandler.SetBuffer(buffer, 0, buffer.Length);

if (!udpSocket.ReceiveFromAsync(udpSocketEventHandler))
{
    ProcessReceiedData(udpSocketEventHandler);
}

private static void UdpReceived_Completed(object sender, SocketAsyncEventArgs e) 
{
    ProcessReceiedData(e);
}

private static void ProcessReceiedData(SocketAsyncEventArgs e)
{
    switch (e.LastOperation)
    {
        case SocketAsyncOperation.ReceiveFrom:
            if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success )
            {
               // data processing here
            }
            break;
       default:
           break;
    }
}
...