• node.js模拟抄表 tcp服务端和客户端


    2015-11-18 09:38:01

    在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持。然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据。因此在node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。  

    服务端

    var net = require('net');
    
    var server = net.createServer(function (socket) {
        socket.on('data', function (data) {
            // console.log(data);
            //如果传递的数据是复杂类型的,需要使用JSON.parse来对数据进行格式化;如果是数字或者字符串等简单类型的,可以直接使用buf.toString转为字符串。
            data = JSON.parse(data);
            // data = data.toString();
            console.log(data);
            console.log('此次需要的类型是:' + data.transType);
            if (data.order == 'order1' && data.transType == 'time') {
                var time = new Date();
                data.time = time.getMinutes().toString() + ':' + time.getSeconds().toString() + '.' + time.getMilliseconds().toString();
                data.transType = 'time';
                // console.log('data:');
                console.log(data);
                console.log('发回时间 ' + data.time);
                data = JSON.stringify(data);
                // console.log(typeof data);
                // console.log('data:');
                console.log(data);            
                socket.write(data);
            } else if (data.transType == 'result') {
                var num = 0;
                for (var i = 0 ; i < 10 ; i++) {
                    num = num + i;
                }
                num = num + parseInt(Math.random() * 10);
                data.result = num;
                console.log('发回结果 ' + data.result);
                data = JSON.stringify(data);
                socket.write(data);
            }
        })
    
        socket.on('end', function () {
            console.log('客户端断开连接
    ');
        })
    
        socket.on('error', function (data) {
            console.log(data);
            console.log('客户端错误');
        })
    
    });
    
    server.listen(8124, function() {
        console.log('服务端开启');
    })

    客户端

    var net = require('net');
    
    var client = net.connect({port:8124}, function() {
        console.log('客户端连接');
    
        // setInterval(function() {
            var time = new Date();
            var a = {};
            a.order = 'order1';
            a.transType = 'time';
            var a = JSON.stringify(a);
            // a.setEncoding('utf-8');
            console.log(a);
            client.write(a);
            // }, 1000);
    });
    
    client.on('data', function(data) {
        // console.log('data:');
        // console.log(data);
        data = data.toString("utf-8");
        data = JSON.parse(data);
        // console.log(data);
        if(data.transType == 'time') {
            console.log('抄表需要时间:' + data.time);
            data.transType = 'result';
            data = JSON.stringify(data);
            client.write(data);
            // console.log('需要结果');
        } else if (data.transType == 'result') {
            console.log('抄表结果:' + data.result + '
    ');
            // client.end();
            // console.log('data:');       
            // console.log(data);
        }
    });
    
    client.on('end', function() {
        console.log('断开连接');
    })
    
    client.on('error', function(data) {
        console.log(data);
        console.log('错误');
    })
  • 相关阅读:
    Meta http-equiv属性详解(转)
    meta
    meta viewport 详解
    jquery 常用函数
    jquery 设置css样式
    jquery 常用函数集锦
    DATEDIFF 和 DATEADD
    C# 二进制图片串互转
    C# 二进制字符串互转
    重集合中找出最相近的一个数字
  • 原文地址:https://www.cnblogs.com/lswit/p/4973530.html
Copyright © 2020-2023  润新知