0

次のコードは android で試行されましたが、送信者 (デスクトップ アプリ) と Android アプリの両方が同じネットワーク上にあることを意味する、直接 WI-FI を使用してデータを受信しません。送信アプリは、WI-FI タブレットの IP アドレスを認識し、そのアドレスにデータを送信します。

ただし、次のコードは、スタンドアロンの Java アプリケーションとして実行すると問題なく動作します。受信コードは InetAddress アドレスを使用しません。Androidで必要ですか。誰かがWI-FI経由でudpデータを受信する例を投稿できますか.

送信者は、タブレットの IP アドレスを知っているタブレットにデータを送信します。送信者と受信者の両方が同じポートを使用しています。

データ パケットを取得し、データ パケットからコンテンツを取得しようとしています。送信者に何もエコーバックしていません。送信者に何かをエコー バックする必要がありますか。また、WI-FIマネージャーが必要ですか?

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class NetworkReceiver {

  static boolean isFinish = false;

    try {

         DatagramSocket s = new DatagramSocket(2010);
         System.out.println("setting up port");
         byte[] data = new byte[12];

        while (!isFinish) 
        {          
            System.out.println("creating datagram");
            DatagramPacket p = new DatagramPacket(data, data.length);
            s.receive(p);
            System.out.println("got packet");
            ByteBuffer bb = ByteBuffer.allocate(12).order(ByteOrder.LITTLE_ENDIAN);
            bb.put(data);
            bb.rewind();
            System.out.println(bb.getFloat());
            System.out.println(bb.getFloat());
            System.out.println(bb.getFloat());

         }
    } catch (IOException e) {
      e.printStackTrace();
    }

}
4

1 に答える 1

0

ただし、次のコードは、スタンドアロンの Java アプリケーションとして実行すると問題なく動作します。

同じWIFIルーターに接続された2台の別々のPCから送信者と受信者のアプリケーションを実行したと思いますか?

データ パケットを取得し、データ パケットからコンテンツを取得しようとしています。送信者に何もエコーバックしていません。送信者に何かをエコー バックする必要がありますか。また、WI-FIマネージャーが必要ですか?

いいえ、受信したパケットをエコーし​​たり応答したりする必要はありません。

受信者コードは、少なくとも最初に送信されたパケットを受信するのに十分なようです。AndroidManifest.xml のアクセス許可でネットワーク アクセスが許可されていない場合、Android は文句を言うでしょう。

送信アプリ (コードを含める必要があります) が実際に WIFI ネットワークにパケットを送信していることを確認するまで、私が提案できるのは、PC からタブレットに ping を送信できることを確認することだけです。次に、送信側 PC に Wireshark をインストールし、実行時に発行される UDP パケットを確認します。宛先アドレスとポートを確認してください。それらがタブレットに届くように見えることを確認してください。

最後に、送信側でタブレットの IP アドレスを指定したので、UDP をマルチキャストしようとしていないと仮定します。その場合は、WifiManager でマルチキャスト ロックを取得する必要があります。

于 2013-09-24T18:34:28.370 に答える