0

ここで、クライアントでメッセージを受信する際に少し問題があります。

基本的に、「Hello world」というメッセージをリスナーに送信できますが、リスナーが「Reply」を送信しようとすると、クライアントはメッセージを受け取りませんか?

ここで何が欠けていると思いますか?

クライアント:

        var socket = new DatagramSocket();
        socket.MessageReceived += HandleMessageReceive;
        await socket.ConnectAsync(new Windows.Networking.HostName("224.192.12.12"), "9991");
        socket.JoinMulticastGroup(_multicastGroupIp);

        DataWriter writer = new DataWriter(_socket.OutputStream);
        writer.WriteString("Hello world");
        await writer.StoreAsync();

リスナー:

            var stateObject = new StateObject();
            stateObject.LocalEndPoint = new IPEndPoint(IPAddress.Any, 9991);
            stateObject.SocketClient = new UdpClient();

            stateObject.SocketClient.Client.Bind(stateObject.LocalEndPoint);
            stateObject.SocketClient.JoinMulticastGroup(IPAddress.Parse("224.192.12.12"));
            stateObject.SocketClient.BeginReceive(new AsyncCallback(HandleDiscoveryServiceReceive), stateObject);

private static void HandleDiscoveryServiceReceive(IAsyncResult ar)
        {
            var stateObject = (StateObject)ar.AsyncState;

            IPEndPoint localEndPoint = stateObject.LocalEndPoint;

            byte[] data = stateObject.SocketClient.EndReceive(ar, ref localEndPoint);
            string decodedData = Encoding.UTF8.GetString(data);
            System.Console.WriteLine("Got something back: {0}", decodedData);

            UdpClient client = stateObject.SocketClient;
            client.MulticastLoopback = false;
            byte[] msg = Encoding.UTF8.GetBytes("REPLY");
            IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("224.192.12.12"), 9991);
            client.Send(msg, msg.Length, remoteEndPoint);

            client.BeginReceive(HandleDiscoveryServiceReceive, stateObject);
        }
4

1 に答える 1

0

応答を間違ったアドレス: ポートに送信しているに違いありません。あなたはそれを配線しました:なぜですか?リモート アドレス: ポートは、受信によって使用可能になります。それを使用します。

于 2012-05-20T01:56:59.417 に答える