machao
machao
  • 发布:2014-08-19 19:05
  • 更新:2019-08-01 21:35
  • 阅读:37331

如何建立socket连接

分类:HTML5+

使用hbuild如何实现tcp的socket连接,原生的android可以newsocket = new Socket(ip_addr, ip_port)实现,如果使用hbuild该如何实现???

2014-08-19 19:05 负责人:无 分享
已邀请:

最佳回复

Chuck

Chuck

我今天试了一下,可以建立Socket连接了,也能进行数据收发。js代码如下:

function testSocket(){  
    if (plus.os.name == "Android") {  
        var Socket = plus.android.importClass("java.net.Socket");  
        var PrintWriter = plus.android.importClass("java.io.PrintWriter");  
        var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");  
        var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");  
        var BufferedReader = plus.android.importClass("java.io.BufferedReader");  
        var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");  

        var socket = new Socket("192.168.23.8", 8080);  

        var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());  
        var bufferWriter = new BufferedWriter(outputStreamWriter);  
        var out = new PrintWriter(bufferWriter, true);  
        out.println("Conneted...");  

        var inputStreamReader = new InputStreamReader(socket.getInputStream());  
        var br = new BufferedReader(inputStreamReader);  
        var msg = br.readLine();  

        //while(true)  
        {  
            if(msg != null)  
            {  
                console.log(msg);  
            }  
            //msg = br.readLine();        
        }  
    }  
    //console.log(mac);  
    alert("Done");  
}
  • Chuck

    不过随之而来的一个问题是:如何开一个线程或者服务来接收服务器端发来的消息。

    2015-05-26 19:31

  • DCloud_heavensoft

    回复 Chuck: 期待你继续研究,万一遇到Native.js有bug,爆出来,我们优先解决。

    2015-05-27 01:15

  • Chuck

    回复 DCloud_heavensoft:我再捣鼓捣鼓~

    2015-05-27 09:21

  • 一切归零

    我这边连接的为何创建出来的socket对象一直是null?

    2015-11-19 12:59

  • 一切归零

    可以了,莫名其妙好了

    2015-11-19 17:38

  • ganjue123

    我想问下这个socket有问题为什么还要作为官方插件放在这里??????

    2016-04-07 15:56

  • tutuhuai

    为什么客户端接收不到服务端的信息

    2016-06-17 11:46

  • m***@163.com

    回复 Chuck:你好啊, thread搞定了吗,有没有解决方法哦,

    2016-08-10 10:37

  • 无所不帅

    回复 一切归零:你是怎么建立Socket连接的,能进行数据收发吗?

    2017-02-15 17:20

  • h***@163.com

    回复 Chuck: 你好问下线程阻塞的解决办法有吗

    2019-09-20 12:00

[已删除]

[已删除]

今天测试了一下最佳评论里面的代码,发现居然报错了!!!

Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket

不能在主线程调用网络,只能采用异步方式。而且,这个问题出现在Andriod 4.0以上:

Android在4.0之前的版本 支持在主线程中访问网络,4.0以后不支持。
解决方法:
1.通过新的线程访问网络

然后,新的线程访问是不可能了,目前NJS的一块短板,真头疼。

然后看了些文章,说可以用StrictMode来改良异步阻塞问题,于是果断对上面Chuck大神的代码改良了一下。

var Socket = plus.android.importClass("java.net.Socket");  
        var PrintWriter = plus.android.importClass("java.io.PrintWriter");  
        var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");  
        var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");  
        var BufferedReader = plus.android.importClass("java.io.BufferedReader");  
        var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");  

        //测试改良  
        var StrictMode = plus.android.importClass("android.os.StrictMode");  
        var Build = plus.android.importClass("android.os.Build");  
        if (Build.VERSION.SDK_INT > 9) {  
            var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();  
            StrictMode.setThreadPolicy(policy);  
        }  
        var socket = new Socket("192.168.1.100",9100);

于是,可以了……这里加个Andriod版本判断,可以兼容4.0以上和4.0以上。

谢天谢地解决问题,我终于可以用Andriod手机去调用热敏打印机愉快地打印小票了!

  • alook

    我用java-adt打包能调么?

    2017-04-19 15:27

  • t***@qq.com

    大哥,碰到你的错误,我终于按照你的方法解决了,谢谢!

    2018-11-23 14:31

  • t***@qq.com

    必须赞这哥儿们,好样的

    2018-11-23 14:32

  • 1***@qq.com

    大哥,这是纯hbuilder开发的,还是和android混合开发的?求解答

    2018-11-26 15:06

  • 1***@126.com

    我的如果连不上打印机,会卡死,请问怎么解决?

    2019-04-02 20:57

  • l***@163.com

    请问如何实现打印的?

    2019-09-05 16:29

  • 2***@qq.com

    我想问下,打印中文乱码,怎么解决啊

    2020-01-03 11:33

Jack_liu

Jack_liu

官方真实坑爹,集成下websocket能花官方多长时间啊,这个又搞不定,还老被指引到这里来

DCloud_heavensoft

DCloud_heavensoft

  1. 首先ios和Android4.4支持websocket,可直接用。
  2. 对于Android4.4以下,可以使用最佳答案里的Native.js。不过其实现在4.4以下的手机也可以放弃了
  3. 用socket.io的js库,它会自动屏蔽Android4.4以下不兼容websocket的问题,相关资料自行搜索。
  • wangchao719

    哪里有sdk插件的集成方法吗?

    2015-07-20 18:54

无所不帅

无所不帅

也可以使用、、jq.websocket,连接服务器,我现在的问题是,,怎么在安装app时,启动两个进程,一个运行程序,一个负责socket连接,程序退出后,连接还在不受影响,这样就可以接受到服务端推过来的消息了。

  • 4***@qq.com

    后台服务整出来了没,这个思路是对的

    2017-08-26 16:21

machao

machao (作者)

之前使用phonegap时是自己写的插件实现的,不知道hbuild是如何实现法?

三分天下

三分天下

为什么没有iOS的示例代码?

tutuhuai

tutuhuai - 打你,不需要理由

赶紧解决这个问题,,socket,可以用原生解决方案,为什么不实现呢

1***@qq.com

1***@qq.com

有谁搞定的?分享下代码啊,跪求啊大哥大姐。

春华秋实

春华秋实

这个直接用web socket就好啊 我现在面临得问题是想能解决游戏的音效和音乐分离的问题

  • pk发型不乱

    websocket怎么解决锁屏后(或者休眠后)几分钟(很可能受省电模式的影响)老是断开又连接的问题?

    2018-10-08 13:22

无所不帅

无所不帅

这个怎么连得、、有具体的例子吗、、我怎么连不上

1***@qq.com
lam

lam

收不到回来的消息

n***@qq.com

n***@qq.com

收不到回来的消息

3***@qq.com

3***@qq.com - 物联网应用

上面的代码我测试了,可以连接服务器,也能够给服务器发送数据,但是服务器发回来的数据app接收不到啊!怎么回事呢?

1***@qq.com

1***@qq.com

为什么我按照@Sychel大神的修改了,还是提示报错: Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket

t***@qq.com

t***@qq.com

现在有一个问题,我socket连接了之后,out.println("Conneted...");发送了一次数据,我还想再发数据用什么方法呢?

FYC

FYC - 80后IT男

学习一下

2***@qq.com

2***@qq.com

怎么更改传输的编码呀

n***@qq.com

n***@qq.com

哪一种网口pos打印机 这个呢

1***@163.com

1***@163.com

这个socket怎么调用呢?

1***@163.com

1***@163.com

socket打印中文乱码

3***@qq.com

3***@qq.com

怎么打包使用,我测试可以用,打包代码就出现错误

  • 6***@163.com

    请问后端服务必须用java吗?

    2019-10-21 17:46

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