こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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>

投稿日時 - 2012-07-04 09:27:02

QNo.7571213

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

dp = new DatagramPacket("AAA".getBytes(), 4, remoteAddress);
ここが気になった。”AAA".getBytes()は3バイトになると思われるけれども、長さを4としている。
もしかしてArrayIndexOutOfBounds例外などが発生しているのかもしれない。
catchに流れてないか確認してみてはどうでしょう。

投稿日時 - 2012-07-04 09:47:02

ANo.1

Wr5

Androidアプリは作ったことありませんが(というかJavaもアレですが)……。

TCPだと成功するのでしょうか?
# パケットキャプチャしてTCPの接続要求がくるのでしょうか?

あと…ちゃんとやっていると思いますが、パーミッションの設定はしてあるんですよね?
http://pentan.info/android/app/permission_list.html
http://akotao.blogspot.jp/2011/07/androidudp.html

投稿日時 - 2012-07-04 09:41:07

あなたにオススメの質問