Android UDP套接字无法发送数据

时间:2013-01-31 16:33:47

标签: android sockets udp

我是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,但结果是一样的,有人可以帮我找到错误吗?

由于

1 个答案:

答案 0 :(得分:2)

实际问题是您的PC无法访问您正在发送的UDP数据包,因为该数据包是在“仿真器”设备通过Loopback机制使用的其他IP地址上发送的。

这是事情。您可以放心地假设Android模拟器是通过IP网络远程连接到PC的远程计算机,它有自己的IP地址并可以与您的PC通信。您不能只使用环回IP通过IP与PC通信。请按照本文档页面Emulator中的说明使用10.0.2.2

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