2023-06-12
工作记录
00

目录

实现方法
测试用例
设计思想

image.png

前言

nodejs编程中,有时我们希望通过tcpip与外界进行通信,Json数据格式是常见的一种,下面我们将介绍一种简单的接收JSON字符串的方法。

实现方法

js
let net = require('net');
let port = 8090;

let chunk = "";
const startDelimiter = '{';
const endDelimiter = '}';
let startFlag =0;
let endFlag =0;
let start_index =0;
let end_index =0;

let server = net.createServer(function handleEvent(socket){
socket.on('data', function(data) { 
console.log('Recv:::'+data);
	if(startFlag == 0){
		data = data.toString();
		let indexStart = data.indexOf(startDelimiter);
		start_index = getStrCount(data,startDelimiter);
		end_index = getStrCount(data,endDelimiter);
		if(indexStart>=0){
			data = data.substring(indexStart);
			let indexEnd = data.lastIndexOf(endDelimiter);
			if(start_index>end_index){
				 startFlag =1;
			}else if(start_index == end_index){
				endFlag =1;
				data = data.substring(0,indexEnd+1);
				console.log('json 字符串输出:::'+data);
			}else{
				console.log("Get Data Format Error");
				chunk = "";
				data ="";
			}
		}else{
			data ="";
		}
	}else{
		chunk+= data;
		start_index += getStrCount(chunk,startDelimiter);
		end_index += getStrCount(chunk,endDelimiter);
	    if(start_index == end_index){
			endFlag =1;
			chunk =  chunk.substring(0,indexEnd+1);
			console.log('Output2:::'+chunk);
		}
		
	}		
});
});
server.listen(port,function() { 
  console.log('server is listening');
});

function getStrCount(aStr,aChar){
  let regex = new RegExp(aChar, 'g');
  let result = aStr.match(regex);
  let count=!result ? 0 : result.length;
  return count;
}

测试用例

  • 客户端发送标准json字符串
    image.png

  • 服务器接收JSON字符串情况
    image.png

设计思想

  • 先将陆续到达的字符串拼接,然后做出判断
  • 根据json字符串中“{”和“}”两个字符判定开始和结束,并根据它俩数量的多少完成多层接收。
  • 详情请关注我的
    github,我后续会进一步完善。

容错处理还没完成,比如一个json字符串分两次发送,后续有时间更新一下,目前只接收一整段完整的JSON字符串

如果对你有用的话,可以打赏哦
打赏
logo ali pay
logo wechat pay