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>

不在应用程序标签之间

我使用基于 Android API 7 的 AVD,但我尝试过使用 API 16 的另一个 AVD,但结果相同,有人可以帮我找出问题所在吗?

谢谢

4

1 回答 1

2

实际的问题是您的 PC 无法访问您发送的 UDP 数据包,因为该数据包是在设备“模拟器”通过环回机制使用的不同 IP 地址上发送的。

事情就是这样。您可以放心地假设 Android 模拟器是一台通过 IP 网络远程连接到您的 PC 的远程机器,它有自己的 IP 地址并且可以与您的 PC 通信。您不能只使用环回 IP 通过 IP 与您的 PC 通信。请改用10.0.2.2本文档页面Emulator中指定的方法。

使用该 IP,您将能够在 netcat 中看到数据包。

于 2013-01-31T17:14:46.447 回答