UDPによる送受信

4,013 views
Skip to first unread message

hide.s

unread,
Oct 27, 2011, 3:33:23 AM10/27/11
to 日本Androidの会
お世話になります。

佐藤と申します。

UDPを使用した端末間通信で受信がうまくいきません。
送信は以前にPCをサーバとした時にデータの送信をしていたのでできております。

受信側のやり方としてはjavaのネットワーク通信のサイトなどを参考にし

DatagramSocket socket = new DatagramSocket(port);

byte recvData[] = new byte[1024];

DatagramPacket packet = new DatagramPacket(recvData,
recvData.length);

socket .receive(packet);

っと、なっております。
デバックで追ってもsocket内のポートが「-1]っとなってるいる時点でポートが開いてないとは思いますが・・・

送信側は受信側との間にPCを置いてcgi経由でグローバルIPを管理し受信し、UDP通信している形となっています。

何か受信する方法があればアドバイス頂ければとおもいます。
以上、よろしくお願いします。







mosaki4

unread,
Nov 19, 2011, 2:54:19 AM11/19/11
to android-g...@googlegroups.com
大崎といいます。

自分もjavaのネットワーク通信のサンプルソースを記述しているサイトを参考に
ほぼ同じソースを記述しましたが通信できました。
記述されていたsocket内のポートは -1 でしたが動作しています。

考えられそうな原因としては、
 1.アプリのパーミッションに通信許可を記述していない
 2.受信をスレッドで行っていない
 3.IPの指定に誤りがある(エミュレータなどは注意がいるようです)
 4.中継しているPCの処理に誤りがある
等でしょうか

まずはシンプルに自分自身を対象とした送信・受信機能を持ったアプリを作成することで
Android側単体では問題がないことが確認できるので
その後で中継PCとの連携をテストしていくことでどの部分が原因で通信できないか分かるのではないでしょうか?

以下に自分が試したソースを記述します。

    // 別スレッドで実行するほうがよい
    private void sendMessage(String message){
   
    // udpソケットで自分のIPで5100番ポートを指定
    InetSocketAddress remoteAddress = new InetSocketAddress("127.0.0.1", 5100);

    // UDPパケットに含めるデータ
    byte[] sendBuffer = message.getBytes();

    // UDPパケット
    DatagramPacket sendPacket;

    try {
        // DatagramSocketインスタンスを生成して、UDPパケットを送信
sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, remoteAddress);
new DatagramSocket().send(sendPacket);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

    }
    
    // 別スレッドで実行がほぼ必須
    private void getMessage(){
   
    // 5100番ポートを監視するUDPソケットを生成
        DatagramSocket receiveSocket = null;
try {
receiveSocket = new DatagramSocket(5100);
} catch (SocketException e) {
e.printStackTrace();
}

        // 受け付けるデータバッファとUDPパケットを作成
        byte receiveBuffer[] = new byte[1024];
        DatagramPacket receivePacket = 
            new DatagramPacket(receiveBuffer, receiveBuffer.length);

        while (true) {
            // UDPパケットを受信
            try {
receiveSocket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}

            // 受信したデータをログへ出力
String message = new String(receivePacket.getData(),0, receivePacket.getLength());
Log.d("TEST", message);
        }
    }


2011年10月27日16:33 hide.s <fullf...@gmail.com>:







--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Reply all
Reply to author
Forward
0 new messages