gadget2k
gadget2k
  • 发布:2015-12-10 22:35
  • 更新:2018-05-31 11:12
  • 阅读:2054

【急用】云打包疑似故障 UDP通讯失效【打包BUG】

分类:HBuilder

我有一段通过UDP接收服务器广播然后写出服务器IP的JS,真机测试很正常,今天打包后的apk安装完就不正常,无法得到结果。
代码如下:

// search for server  
function Str2Bytes(str){          
    var ch, st, re = [];    
    for (var i = 0; i < str.length; i++ ) {    
        ch = str.charCodeAt(i);  // get char     
    st = [];                 // set up "stack"    
    do {    
      st.push( ch & 0xFF );  // push byte to stack    
      ch = ch >> 8;          // shift value down by 1 byte    
    }      
    while ( ch );    
    // add stack contents to result    
    // done because chars have "wrong" endianness    
    re = re.concat( st.reverse() );    
}    
  // return an array of bytes    
    return re;        
}  
function Bytes2Str(arr){  
    var str = "";  
    for(var i=0; i<arr.length; i++) {  
       var tmp = String.fromCharCode(arr[i]);  
       str += tmp;  
    }  
    return str;  
}  

function findServer(){  
    // 导入android.content.Intent类对象  
    var DatagramPacket = plus.android.importClass("java.net.DatagramPacket");  
    var DatagramSocket = plus.android.importClass("java.net.DatagramSocket");  
    var InetAddress = plus.android.importClass("java.net.InetAddress");  
    var SocketEx = plus.android.importClass("java.net.SocketException;");  

    // 导入后可以使用new方法创建类的示例对象  
    var ds = new DatagramSocket();  
    var messageReceived = false;  
    var serverAddress = "Server not found";  
    var data = [];  
    data = Str2Bytes("hello");  
    var port = 9989;  
    var iAdd = new InetAddress();  
    var dp = new DatagramPacket(data, data.length,iAdd.getByName("255.255.255.255"), port);  
    while (!messageReceived){  
        var d = [];  
        d = Str2Bytes("http://255.255.255.255:8898");  
        var dp2 = new DatagramPacket(d, d.length);  
        ds.send(dp);  
        ds.receive(dp2);  
        var dpData = Bytes2Str(dp2.getData());  
        var arrUrl = dpData.split("//");  
        serverAddress = arrUrl[1].substring(0,arrUrl[1].indexOf(":"));  
        return serverAddress;                 
        messageReceived=true;  
        ds.close();  
    }  
}
2015-12-10 22:35 负责人:无 分享
已邀请:

最佳回复

Android_磊子

Android_磊子

问题已经修复,等待更新打包机吧。
当HBuilder更新的时候会写在releaseNote中,这些NJS问题一般会归类到“修复Native.js使用一些api问题”中。

  • gadget2k (作者)

    非常感谢

    2015-12-14 20:13

  • barice

    速度很快啊

    2015-12-14 21:06

  • gadget2k (作者)

    话说,打包机更新会通知大家吗?

    2015-12-17 14:56

  • Android_磊子

    回复 gadget2k:一般HBuilder更新的时候会写在releaseNote中,这些NJS问题都会归类到修复Native.js使用相关问题中

    2015-12-17 15:42

Android_磊子

Android_磊子

有没有可以运行起来的测试demo发出来。
再说说你的测试环境和步骤。

  • gadget2k (作者)

    文件发了,麻烦帮我看下。我的测试环境就是win 7, hbuilder是最新版本。

    2015-12-11 13:27

  • gadget2k (作者)

    忘了说了,步骤就是:PC上安装我说的服务程序,如果安全应用提示,请给予信任。然后只要在同一个内部网络,手机上运行我给的程序就会得到服务所在PC的IP, 从而访问该机通过那个服务共享出来的照片。

    2015-12-11 13:32

  • gadget2k (作者)

    您好。有答案吗?

    2015-12-12 13:45

  • gadget2k (作者)

    放上来好几天了,不知道您有没有结论?

    2015-12-14 09:08

  • Android_磊子

    回复 gadget2k:排查中呢。

    2015-12-14 17:02

  • Android_磊子

    回复 gadget2k:你说的真机调试正常是使用HBuilder测试NJS正常吗?

    2015-12-14 17:15

  • gadget2k (作者)

    就是手机用USB线连着,hbuilder点击 运行

    2015-12-14 17:20

gadget2k

gadget2k (作者)

能请你访问一下这个网址 http://photo.finger2play.com/index-cn.html 安装一下那个服务器吗?然后用我随附的工程跑一下。

gadget2k

gadget2k (作者)

麻烦大神们回复一下啊,我自己试下来是到下面这句不执行了

var dp = new DatagramPacket(data, data.length,iAdd.getByName("255.255.255.255"), port);

请问该怎么修正才能起效?明明真机测试是OK的。

gadget2k

gadget2k (作者)

请问该怎样才能得到及时的帮助?我问这个问题已经3天了

barice

barice

不确定问题,不过确定是用 255.255.255.255 来接收吗?

  • gadget2k (作者)

    这个不要紧的,只是为了撑满ip所需位置。现在的问题是,同样的代码,联机测试是正常的,打包了就不正常。是不是就可以判断打包机出了问题?

    2015-12-14 13:25

barice

barice

另外,提醒一下,255 是不会被路由器转发的哦

  • gadget2k (作者)

    是说 iAdd.getByName里面的255吗?这是向全区段广播的意思。我还是那个问题,为何真机测试一切正常?

    2015-12-14 13:30

barice

barice

因为我没有在 Dcloud 的环境下写过 udp 的东西, 实际问题比较不清楚
不过,记得当年遇过几个问题,像是要 bind server 端口的记忆比较深刻
udp没有大坑
就是姿势要对而已

真机没问题,打包就有问题...这个我就不懂了..

  • gadget2k (作者)

    总之,感谢回复。在这里问问题,好像身在沙漠一样……

    2015-12-14 13:41

9***@qq.com

9***@qq.com

请问一下,在ios里怎么调用DatagramSocket呢?

该问题目前已经被锁定, 无法添加新回复