2013-01-31 45 views
2

我是Android编程中的新手,我想写一段代码,它只是在127.0.0.1上发送一个字符串,我可以在netcat上看到它,但问题是当我尝试在我的Android项目上没有任何事情发生时,所以我尝试了一个通常的Java项目,并且一切正常。 所以经过大量的调查研究我已经找到...没有Android UDP套接字无法发送数据

我的Android代码:

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

netcat是否在您的PC或您的仿真器上运行? –

+0

是的,在我的电脑上运行netcat,当我尝试我的代码就像一个经典的Java poject netcat打印出我的字符串“测试” – Josey

回答

2

实际的问题是,您的PC必须要发送,因为数据包被在该设备“模拟器”通过Loopback机制使用不同的IP地址发送的UDP数据包的访问权限。

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

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

+0

它运行良好,谢谢 – Josey

相关问题