0

MulticastSocket 経由で WIFI アクセス ポイントにメッセージを送信すると、常に 2 回返信が返ってきます。自分にメッセージを送信しようとすると、メッセージが 2 回届きます。これは私の受信機コードです:

protected Void doInBackground(Void... params) {

                String lText;
                byte[] lMsg = new byte[GlobalConfig.MAX_UDP_DATAGRAM_LEN];
                DatagramPacket dp = new DatagramPacket(lMsg, lMsg.length);
                MulticastSocket ds = null;
                try {
                    ds = new MulticastSocket (32001);
                    InetAddress serverAddr = InetAddress.getByName("224.237.124.120");
                    ds.joinGroup(serverAddr);
                    while (serverActive) {

                        ds.receive(dp);
                        Log.d("UDP packet received", dp.toString());
                        lText = new String(lMsg, 0, dp.getLength());
                        receivedMessage = lText;
                        doSomething();

                    }
                } catch (SocketException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (ds != null) {
                        ds.close();
                    }
                }
                return null;
            }

DatagramSocket と MulticastSocket を介して送信しようとしましたが、関係ありません。メッセージは常に 2 回受信します。理由がわかりません!

編集: 私の LogCat:

I/GatewayController﹕ Message Sent
...

D/UDP packet received﹕ java.net.DatagramPacket@422dc860
D/UDP packet received﹕ java.net.DatagramPacket@422dc860

EDIT2: 送信者コード

protected Void doInBackground(Void... params) {

                DatagramSocket ds = null;
                try {
                    ds = new DatagramSocket();
                    InetAddress serverAddr = InetAddress.getByName("224.237.124.120");
                    DatagramPacket dp;
                    dp = new DatagramPacket(byteMsg, byteMsg.length,
                            serverAddr, 32000);
                    ds.send(dp);
4

2 に答える 2

-1

正しい方法は次のとおりです。

InetAddress group = InetAddress.getByName(GlobalConfig.MULTICAST_IP);
SocketAddress sockaddr = new InetSocketAddress(group,GlobalConfig.LOCAL_PORT);
ds = new MulticastSocket(sockaddr);
ds.joinGroup(group);

これは重要ですが、インターネットの例で見つけるのは困難です:

SocketAddress sockaddr = new InetSocketAddress(group,GlobalConfig.LOCAL_PORT);
ds = new MulticastSocket(sockaddr);
于 2015-04-28T21:56:56.403 に答える