2011-09-09 17 views
0

私は、クロスプラットフォームのUDPサーバクライアントの開発の初期段階にあります。私の場合、クライアントは、接続されているアンドロイド携帯電話にモバイルホットスポットオプションを使用してブロードキャストを送信します。Android 3G UDPブロードキャスト

私は現在、サーバとクライアントを同じデバイス上に置いてテストしています。しかし、私はボックスアドレスのリモートアプリのおかげで、ブロードキャストアドレスを取得する方法のみを知っています。

モバイルネットワークのブロードキャストアドレスを取得するには、以下のコードと同じことを行う方法を知っている人はいませんか?

だから、ここのコードです:ワシ目読者のために

InetAddress getBroadcastAdd(Context context) throws IOException { 
    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    DhcpInfo dhcp = wifi.getDhcpInfo(); 

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; 
    byte[] quads = new byte[4]; 
    for (int k = 0; k < 4; k++) 
     quads[k] = (byte) ((broadcast >> k * 8) & 0xFF); 
    return InetAddress.getByAddress(quads); 
} 

、あなたはアプリがブロードキャストアドレスを取得する他のデバイスとして機能するために、私は実際にこのコードを必要としないことを集めているでしょうWi-Fiからのものですが、まずこの1台のデバイスでいくつかのテストを行う必要があります。

ありがとうございます!

答えて

0

ほとんどのネットワーク(Wifiおよび3G)はNATを使用します。 NATは発信接続を許可しますが、インバウンド(インターネットからデバイスへ)接続は禁止します。

サーバとデバイスが同じローカルネットワーク(Wi-Fi)にある場合は、NATゲートウェイを通過していないため、この機能は動作します。

理由:インターネットからデバイスに接続しようとしていることは、ほとんどのネットワークでは機能しません。

更新

あなたのデバイスの両方が同じローカルネットワーク上にある場合、あなたは、広告/発見サービスの標準化された方法を使用することができます:Bonjourの別名のZeroconfを。 Android上で動作することが報告されているJavaの実装があります:http://jmdns.sourceforge.net/

また、私はファイルを要求し、私はAndroidデバイスがそれに接続している他のデバイスと、サーバーとして動作するようにしたい、インターネットへのアクセスを必要としないhttp://home.heeere.com/tech-androidjmdns.html

+0

を見ます –

+0

私が言ったように - あなたはできません。 NATは、インターネットとデバイス間の接続を開始できないようにします。 –

+0

両方のデバイスが同じローカル(Wi-Fi)ネットワーク上にある場合にのみ機能します。 –

関連する問題