重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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>

A 回答 (2件)

dp = new DatagramPacket("AAA".getBytes(), 4, remoteAddress);


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

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



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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!