2

私はAndroidプログラミングの初心者で、127.0.0.1で文字列を送信するだけのコードを書きたかったのですが、netcatでそれを見ることができますが、問題はAndroidプロジェクトで試しても何も起こらないことです、だから私は通常のJavaプロジェクトで試してみましたが、すべてうまくいきました。それで、多くの調査の後、私は見つけました...何もありません

私のアンドロイドコード:

   import android.app.Activity;
   import android.os.Bundle;
   import android.view.Menu;
   import android.view.View;
   import android.view.View.OnClickListener;
   import android.widget.Button;

   import java.net.*;
   import java.io.*;

   public class MainActivity extends Activity {


public static final int MON_PORT = 5001;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button bouton2 = (Button)findViewById(R.id.envoi);
    bouton2.setOnClickListener(new OnClickListener(){

      public void onClick(View v){    
  try {

        int port=MON_PORT;
        InetAddress adresse = InetAddress.getByName("localhost");
        DatagramSocket socket;


        String leMessage = "test";
        int longueur = leMessage.length();
        byte[] message= new byte [longueur];
        message = leMessage.getBytes();


        socket = new DatagramSocket();                      
        DatagramPacket packet = new DatagramPacket(message,longueur,adresse,port);
        socket.send(packet);
        System.out.println("test d'execution");
        socket.close();

            } catch (UnknownHostException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                        catch (SocketException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }   

      }
  });   


 }

そして、 AndroidManifest.xml と許可を確認しました:

<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission>

applications タグの間にない

私は Android API 7 に基づく AVD を使用していますが、API 16 で別の AVD を試してみましたが、結果は同じです。

ありがとう

4

1 に答える 1

2

実際の問題は、デバイスの「エミュレーター」がループバックメカニズムを介して使用する別の IP アドレスでパケットが送信されているため、送信している UDP パケットに PC がアクセスできないことです。

これが事です。Android エミュレーターは、IP ネットワークを介して PC にリモート接続されたリモート マシンであり、独自の IP アドレスを持ち、PC と通信できると想定できます。ループバック IP だけを使用して PC over IP と通信することはできません。このドキュメンテーション ページEmulator10.0.2.2で指定されているように代わりに使用してください。

その IP を使用すると、netcat でパケットを確認できます。

于 2013-01-31T17:14:46.447 に答える