首先声明是UDP通讯不是TCP!现在的情况是,PC机做Server,通过Android模拟器的Client可以正常发送数据到PC机的Server,PC机的Server也可以接收到数据(说明:IP地址为192.168.0.21  端口为4510)问题来了!!!!!!现在就是跟上面反过来,用Android模拟器做Server,PC机做Client,PC机Client怎么发送数据,Android模拟器Server都接收不到数据,也没有任何异常,PC机Client连接的IP地址为127.0.0.1(说明:192.168.0.21,10.0.2.15这两个IP地址都试过也不行),端口是4520
各位高手看看是什么原因,本人初学Android

解决方案 »

  1.   

    回1楼的:
    UDP跟TCP应该没什么区别吧,UDP都连不了估计TCP也是不行的,这两样东西本来就没什么本质的区别,我现在怀疑是不是Android模拟器的IP地址不对,我在网上找了些资料,有些说Android模拟器的IP地址为127.0.0.1,有些说是10.0.2.2,但我用代码获取出来的IP地址是10.0.2.15,可这几个IP都试过,还是不行。
      

  2.   

    好奇怪的情况,应该不会有问题的如果PC机做Server,通过Android模拟器的Client可以的话,反过来应该也行啊
      

  3.   

    我TCP 通信  在模拟器上用 10.0.2.2 可以访问电脑本机
      

  4.   

    to jun506:
    我现在是模拟器可以访问PC机,是PC机访问不了模拟器!
      

  5.   

    我的TCP PC 机访问模拟器 用 127.0.0.1
      

  6.   

    to jun506:
    没有任何错,也没有任何异常,就是PC机发送UDP数据,Android接收不到,什么IP地址我都试过了127.0.0.1、192.168.0.21(本机IP地址)、localhost、10.0.2.2、10.0.2.15这些都试过了,都不行。
    现在是单向的可以,所谓单向就是Android的UDP发送Socket发送数据后马上监听,就可以接收到PC机发送过来的数据,因为这个Socket与PC机建立关联成功后,它们是可以互发送数据的,但是要是有另一个Socket来监听PC机发送的数据就是接收不到,也就是说Android不能作为UDP服务器,只能作为发送端。
      

  7.   

    我把部分代码贴出来:PC机代码:
    /* 发送函数 */
    private void sendData()
        {
            String senddata = "服务器返回数据!";
            try {
             this.dsclient.send(new DatagramPacket(
             buf, buf.lenght,
             InetAddress.getByName("192.168.0.21"), 
             4510));
            } catch (IOException ex){ 
             ex.printStackTrace();
            }
        }
    /* 接收函数 */
    public String recvData(){
            try     
            {
                String data = "";
                this.dsserver = new DatagramSocket(4520);
                
                this.dsserver.receive(this.dpserver);
                
                data = new String(this.dpserver.getData);
                          
                sendData();
                
                return data.trim();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    Android端代码:
    /* 发送数据 */
    public String SendData()
        {
         String data="xxxxxxx";
         try {
             this.packet.setAddress(InetAddress.getByName("192.168.0.21"));
             this.packet.setPort(4520);
        
                this.dsclient.send(this.packet);
            } catch (IOException ex){ 
             ex.printStackTrace();
            }
            return data;
        }/* 接收数据 */
    public String recvData()
        {
         String data = "ccccc";
            try {
                this.dsserver = new DatagramSocket(4510);            DatagramPacket packet = new DatagramPacket(this.buf, this.buflength);
                     
                this.dsserver.receive(packet);
                
                data = new String(packet.getData());
                
                return data.trim();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            return data.trim();
        }
    以上的代码,4520那个端口是可以正常接收到数据的,4510那个端口就是接收不到数据。
      

  8.   

    我试了,好像是不行,唉,我也是新手,TCP 会,UDP 没发送成功,你看下 是不是权限的问题? 看是不是要给他其他的权限(除了android.permission.INTERNET)
      

  9.   

    能ping到模拟器的ip地址吗?
      

  10.   

    to ostrichmyself:
    如果网络权限没有加上,那么Android模拟器应该不能发送到PC机的吧!
      

  11.   

    我就加了一个android.permission.INTERNET权限!
      

  12.   

    to makegame:
    请问一下模拟器的IP是多少,我本朵的IP地址是192.168.0.21
    是不是因为模拟器没有IP地址所以收不到
      

  13.   


    PC Client在连接Dev Server前需要一个端口重定向的过程~ 参考一下我发的帖子,兴许有点用.(http://topic.csdn.net/u/20100127/17/032d0388-cca1-4551-8c2b-927be59fcf20.html)
      

  14.   

    to joy_liut:
    那篇文章我也看过了的,也重定向过了,但是还是没用,一样收不到数据!
      

  15.   

    模拟器和pc只能用ip来通信,在模拟器里面用pc的ip能访问pc机
      

  16.   

    如果是权限的问题,可以在debug状态下查看到异常的,只不过需要仔细跟。
    同时,请教楼主,我查到的模拟器IP为0,是啥回事啊?模拟器上的wifi包不能使用,是不是这个原因?
      

  17.   

    楼主解决没。
    使用telnet 连上模拟器,
    使用重定向,使用redirect命令 将模拟器监听的端口和PC发送的目标端口绑定,
    应该就没有问题了
      

  18.   

    楼上的,我重定向过了,还是不行……
    我的pc发送到7100,模拟器用6100接收,重定向redir add udp:7100:6100
    我这不光接收不到,还有异常……
    socket=new DatagramSocket(6100);模拟器上这句话抛出异常,permission denied,maybe missing internet permission……
    哪位大侠帮帮忙~
      

  19.   

    我的permission也加过了android.permission.INTRENET
      

  20.   

    呵呵....
    多谢各位的参与
    由于这段时间比较忙没空上来
    此问题已解决
    用UDP不管是真机还是模拟器,再怎么端口定向,再怎么加权限都是不行的
    现用TCP一切正常
    可能是Android不支持UDP吧!!!!
      

  21.   

    Android不支持UDP???
    没道理!!
    关注!
      

  22.   

    我也遇到了你们的问题,我是想用UDP实现的,但是现在根本发不了,请问楼主下你的问题解决了吗
      

  23.   

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

  24.   

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

  25.   

    比较奇怪的是,我的模拟器用5070端口接收数据不行,用7766居然就可以接收pc过来的udp包了。。
      

  26.   

    各位还是那么认真的解决这个问题,非常感谢,我现在是用TCP来做的,一切都很正常,UDP现在没做,估计按huanmengQQ来做应该是可以,结贴了!
      

  27.   

    应该是端口被防火墙或是Android系统的什么东西限制了,在Linux下面,我遇到过这个问题,Linux里面向外发数据正常,别人能收到,但是外面到Linux里面的就怎么也收不到,后来我在防火墙上面开了一个udp的端口,就能收到数据了
      

  28.   

    好像各位都是通过内网地址访问的,我想问一下,如果手机和pc不用数据线连接,通过外网ip能够进行绑定吗?
      

  29.   


    我现在TCP不灵啊,求解决方法! 用本机做client,模拟器做server可以连接,地址用127.0.0.1。但是用其他的机器来连接就不成啊!求解!
      

  30.   

    我想你应该看看这篇文章PC电脑和Android模拟器访问及模拟器之间tcp/udp通信
      

  31.   

    请问  android手机外网如何接收pc发来的udp数据?
      

  32.   

    我也遇到这个问题了,关键是以前用时udp好使,一样的代码,现在就不好使了,有人解决了么,到底怎么回事啊