zoukankan      html  css  js  c++  java
  • 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('错误');
    })
  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/lswit/p/4973530.html
Copyright © 2011-2022 走看看