package com.android.figo; 
  
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
  
import java.io.IOException; 
import java.net.*; 
  
public class ReceiveUDP extends Activity { 
     /** Called when the activity is first created. */ 
     DatagramPacket pack=null; 
     DatagramSocket mail_data=null; 
     byte receiver[]=new byte[100];     
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
   
       try {                                                                                        
         pack=new DatagramPacket(receiver,receiver.length);          
             mail_data=new DatagramSocket(8888);         
             mail_data.receive(pack);         
         }  
       catch (Exception e) {} 
         String s=new String(receiver);     
         Log.d("figo",s);           


程序很短,我用自己电脑上的java程序给自己电脑上模拟器发送udp包,发端经测试好用(用自己电脑上另一个java程序接收到了包),这个完全接收不到,uses permission我也设置过Internet了,还是不好用~~~

解决方案 »

  1.   

    UDP是收不到的,只能用TCP!
    我之前研究用UDP有段时间,最后放弃用TCP来做。
      

  2.   


    可以收到UDP包,没有理由只能收TCP不能收UDP
      

  3.   

    Android只能用TCP?为啥不能用UDP呢?
      

  4.   

    LZ解决了嘛?
    我也遇到同样的问题 pc做server,手机做client,现在是手机接收不到数据啊  
    我用软件监听手机流量 手机还是收到了 能达到5MB 用的wlan
    有什么好的解决方案嘛?
      

  5.   

    谁说收不到的,你wifi网关显示流量走了啊,你们说不通是因为usb连吧,首先要说udp并不可靠,换tcp没啥不好的。usb连需要对adbd做一个udp的端口转发或者说映射
      

  6.   

    楼上 你说的是有模拟器吧?
    我用的真机测试的 
    用检测软件看到系统确实收到了PC发的udp包大概在30Mb 但是自己程序的reveice()只能偶尔收到包(既有几Kb)这丢包率也不能这么大啊 
      

  7.   

    我用WIFI做的,手机来发UDP广播包,PC收广播包,成功。手机收UDP,这个不清楚,但Android用的全是Java标准的tcp,UDP操作肯定不会只操作tcp而不能操作UDP,是不是你的硬件有点问题。你使用WIFI连接的吗。
      

  8.   

    我也做过类似的但最后也没有成功感觉pc向模拟器传udp时 好像定位不到具体ip的样子
      

  9.   

    我的程序用wifi可以收到,但是用联通3g网络就收不到
      

  10.   

    我也遇到了同样的问题,但是现在解决了!
    android模拟器作为服务器端接收来自PC的UDP数据包,
    需要在模拟器上做端口映射,用的命令跟TCP的时候有些不同
    redir add udp:8000:9000
    这样做了之后就可以收到UDP的包了!
      

  11.   

    我也遇到这样的问题,是IP地址的问题,默认是127.0.0.1而不是实际LAN中的IP地址,所以广播出去的接受地址是127.0.0.1,当然无法接受了
      

  12.   

    取得正确的IP设置进去就可以了,可以使用下面的方法得到IP.    public static String getIp(){ 
            String localip=null;
            String netip=null;
            try { 
                Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); 
                InetAddress ip = null; 
                boolean finded=false; 
                while(netInterfaces.hasMoreElements() && !finded){ 
                    NetworkInterface ni=netInterfaces.nextElement(); 
                    Enumeration<InetAddress> address=ni.getInetAddresses(); 
                    while(address.hasMoreElements()){ 
                        ip=address.nextElement(); 
                        if( !ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":")==-1){ 
                            netip=ip.getHostAddress(); 
                            finded=true; 
                            break; 
                        }else if(ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":")==-1){
                            localip=ip.getHostAddress(); 
                        } 
                    } 
                } 
            } catch (SocketException e) { 
                e.printStackTrace(); 
            } 
            if(netip!=null && !"".equals(netip)){ 
                return netip; 
            }else{ 
                return localip; 
            } 
        } 
      

  13.   

    pc做server,手机做client,现在是手机接收不到数据
    把电脑的防火墙关了就可以了
      

  14.   

    我用真机测试,udp手机可以链接电脑, 电脑回复手机也ok,但是我不解, 当我用另一个手机来发送数据给另一个手机的时候就不行了,两个手机发送或接受电脑都可以,但就是不能自己直接联系,估计是防火墙的问题,但是为什么来自电脑的链接就可以