- 締切済み
Androidアプリ 通信について
JAVAのカテゴリでご回答が得られなかったのでこちらにも投稿いたします。 タブレット(ICONIA TAB A200 (OS:Android4.0.6))から 無線LANで接続されたPC(SONY製 ネットブック (OS:windows 7 32bit))へ UDPのパケットを送信しようと考えています。 ボタンを押したら文字列"AAA"を送信するだけのものですがボタンを押しても PCにデータが届きません。 PC側はフリーでダウンロードしたUDP/IPツールを使っていますが、 これは使用実績がありますので、問題ないかと思います。 他の方が作られたUDPパケット送信アプリを使うとうまく送信できているので、 タブレットが通信できないということはなさそうです。 問題なのはアンドロイドのアプリ側だと考えています。 パケットキャプチャソフトで見ても特にパケットはPCにきていなさそうです。 PCからアンドロイドタブレットへPing(ICMPパケット)を送ると、ちゃんと応答があります。 どこかプログラムでおかしいところ、抜けていること、余計なことがありますでしょうか? (通信部分に関してお願い致します。) タブレットのIPアドレス192.168.0.3 PCのIPアドレス192.168.0.5 <アンドロイド アプリ main.java> package my.Package.Tabtest; import java.io.IOException; import java.net.*; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class TabtestActivity extends Activity { public DatagramSocket ds; public DatagramPacket dp; public int i; private TextView mytv; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mytv = (TextView)findViewById(R.id.tv1); } public void btn_on(View v){ i++; mytv.setText(String.format("COUNT:%d",i)); try{ InetSocketAddress remoteAddress = new InetSocketAddress("192.168.0.5",42000); dp = new DatagramPacket("AAA".getBytes(), 4, remoteAddress); //Socket の設定,通常の Java と同じ ds = new DatagramSocket(); //DatagramSocket 作成 ds.send(dp); // try catch で利用 } catch(Exception e){ i++; i++; i++; } } } <アンドロイド アプリ レイアウトファイル main.xml> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/tv1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PUSH HERE!!!!!!" android:onClick="btn_on" /> </LinearLayout>
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tyatsumi
- ベストアンサー率58% (30/51)
dp = new DatagramPacket("AAA".getBytes(), 4, remoteAddress); ここが気になった。”AAA".getBytes()は3バイトになると思われるけれども、長さを4としている。 もしかしてArrayIndexOutOfBounds例外などが発生しているのかもしれない。 catchに流れてないか確認してみてはどうでしょう。
- Wr5
- ベストアンサー率53% (2173/4061)
Androidアプリは作ったことありませんが(というかJavaもアレですが)……。 TCPだと成功するのでしょうか? # パケットキャプチャしてTCPの接続要求がくるのでしょうか? あと…ちゃんとやっていると思いますが、パーミッションの設定はしてあるんですよね? http://pentan.info/android/app/permission_list.html http://akotao.blogspot.jp/2011/07/androidudp.html