前提・実現したいこと
Androidエミュレータにて、
UDP受信/ログ出力するテストアプリを作成しています。
テストアプリ(Androidエミュレータ内)側でWindowsからのUDPパケットを
受信させたいです。
発生している問題・エラーメッセージ
UDPのパケット送信テストツールを使用し、
UDPパケットを送信しているのですが、Androidソフト側でパケットを認識しません。
network captureコマンドにて取得した通信パケットの確認をWiresharkで行いましたところ、
10.0.2.2(Android内部ワークステーション) -> 10.0.2.15(Androidエミュレータ)
までUDPパケットが通知されているところまでは確認したのですが、
その直後に
10.0.2.15 -> 10.0.2.2 ICMP Port Unreachble
のエラーが出ているため、
Androidソフト側でポートオープンに失敗しているような雰囲気が
少しだけあります。
→ソフト上でUDPの送受信を行うと、正しく受信できるので、
ポートオープンできていないはずがないのですが。。。
該当のソースコード
Java
1 class ThreadUDPServer extends Thread { 2 @Override 3 public void run() { 4 Log.d("UDP_Test", "ThreadUDPServer run Start!!"); 5 6// ThreadUDPClient client = new ThreadUDPClient(); 7// client.start(); 8 try { 9 DatagramSocket sock = new DatagramSocket(50001);//50001ポートでUDP受信用ソケット構築 10 byte[] data = new byte[1024];//受信最大バッファ 11 DatagramPacket packet = new DatagramPacket(data, data.length);//受信用パケットを構築 12 sock.receive(packet);//受信 13 Log.d("UDP_Test", "UDP受信:" + new String(Arrays.copyOf(packet.getData(), packet.getLength()), "UTF-8")); 14 sock.close();//ソケットのクローズ 15 } catch (Exception ex) { 16 Log.d("UDP_Test", ex.getMessage()); 17 } 18 } 19 } 20 21 class ThreadUDPClient extends Thread { 22 @Override 23 public void run() { 24 Log.d("UDP_Test", "ThreadUDPClient run Start!!"); 25 26 try { 27 sleep(300); 28 String sendData = "UDPてすと!!";//送信データ 29 byte[] data = sendData.getBytes("UTF-8");//UTF-8バイト配列の作成 30 DatagramSocket sock = new DatagramSocket();//UDP送信用ソケットの構築 31 DatagramPacket packet = new DatagramPacket(data, data.length,new InetSocketAddress("",50001));//指定アドレス、ポートへ送信するパケットを構築 32 sock.send(packet);//パケットの送信 33 Log.d("UDP_Test", "UDP送信:"+sendData);//送信データにの表示 34 sock.close();//ソケットのクローズ 35 } catch (Exception ex) { 36 Log.d("UDP_Test", ex.getMessage()); 37 } 38 } 39 }
試したこと
①リダイレクトの追加 redir add udp:50000:50001
②UDPにて Windowsツール -> Windows(50000) -> Androidワークステーション(50001) -> Androidエミュレータ(50001)
の通信
※Androidワークステーションのnetwork captureにて、
10.0.2.15 -> 10.0.2.2 Port Unreachble発生まで確認したので、
リダイレクト自体は正常に動作していると思われる。
③前述のコードにて、ソフト内でUDPClientを作成しパケット送信したものが、
正常に受信されて、ログ出力されるところは確認。
回答2件
あなたの回答
tips
プレビュー