【问题标题】:How to send binary data with socket.io?如何使用 socket.io 发送二进制数据?
【发布时间】:2016-03-07 12:26:43
【问题描述】:

所以我在 node.js(Js 客户端和 Android 客户端)中使用 socket.io 发送二进制数据时遇到了问题。

没有太多信息:

http://socket.io/blog/introducing-socket-io-1-0/

http://socket.io/get-started/chat/

我需要使用 socket io 发送一个我创建并填充的二进制数组。

他们给出的唯一代码如下:

var socket = new WebSocket('ws://localhost');
socket.binaryType = 'arraybuffer';
socket.send(new ArrayBuffer);

我的答案如下。

【问题讨论】:

    标签: java android node.js socket.io binary


    【解决方案1】:

    我终于可以在 JS 和 Android (Java) 上使用它了,所以我决定与大家分享。

    让我们从服务器代码开始:(Node js)

    var http = require('http');
    
    var app = http.createServer(function ejecute(request, response){});
    var io = require('socket.io').listen(app);
    
    
    io.on('connection', function(socket) {
            socket.on('message', function(data){
                console.log("recieved data:");
                console.log(data);
    
                var bufArr = new ArrayBuffer(4);
                var bufView = new Uint8Array(bufArr);
                bufView[0]=6;
                bufView[1]=7;
                bufView[2]=8;
                bufView[3]=9;
                socket.emit('message',bufArr);
            });
        });
    app.listen(3000);
    

    让我们跳到 Javascript 客户端

      var socket = io("http://localhost:3000");
      socket.emit('message', 'hola from js client');
    
      socket.on('message', function(msg){
        var bufView = new Uint8Array(msg);
        console.log(msg)
      });
    

    最后,让我们展示一下 Android (java) 客户端:

        final Socket socket = IO.socket("http://localhost:3000",opts);
    
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                socket.emit("message","hello from java");
            }
        });
    
    
        socket.on("message", new Emitter.Listener() {
    
            @Override
            public void call(Object... args) {
                byte[] bytearray = (byte[])args[0]; //received bytes
    
                for  (byte b : bytearray) {
                    System.out.println("byte"+b);
                }
            }
    
        });
    
       socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
        @Override
        public void call(Object... args) {}
    });
    

    希望对大家有用。 干杯!

    【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多