使用 net 创建 TCP Server时,中文的输入问题
发布于 4 年前 作者 Jedi-walker 3259 次预览 最后一次回复是 4 年前 来自 问答
大家好,我在使用 net 建立 TCP Server 后,使用 WIN10 的命令行终端用 telnet 连接相应端口,然后希望能够接收和输出中文,但目前为止怎么都不成功,不知道各位有没有好的解决方法,谢谢大家了。
我把我目前的测试程序贴出来,很简陋,请勿笑:
const assert = require('assert');
const net = require('net');
const iconv = require('iconv-lite');
let clients = 0;
let expectedAssertions = 2;
const server = net.createServer(function (client) {
clients++;
const clientId = clients;
console.log('Client connected:', clientId);
client.setEncoding('');
client.on('end', function () {
console.log('Client disconnected:', clientId);
});
let infor = '你好,欢迎:' + clientId + '\n';;
let str = iconv.encode(infor, 'GBK')
client.write(str);
let inputStr = ''
client.on('data', (data) => {
if(data == '\r\n') {
inputStr = iconv.encode(inputStr, 'GBK');
client.write(inputStr);
inputStr = '';
} else {
console.log(data);
inputStr+=data;
}
})
});
server.listen(8000, function () {
console.log('Server started on port 8000');
});
10 回复
if(data == ‘\r\n’) … 这种判断是不对的 收到的是“流式数据”,不是你想象的那样。。。
然后找到对应的边界,一般字符串是 \n 就是10 如果找到就输出,没找到就拼接继续在下一块数据中找
@myy 你好,我这么写是根据实际测试得出来的,首先这么做用英文输入输出时绝对没问题, 而如果只写 \n,则可能会出现错误,尤其是输出时如果只写 \n 那换行后光标可能出现在 随机的位置,而不是行首。但如果用 \r\n 就没问题
@yakczh 你好啊,感谢,能不能给一段相对比较全的代码?就是如何把数据拼接起来然后转化为输出,谢谢了。
@Jedi-walker
server.js
client.js
去github搜索我的node-smgp项目的源代码
1.默认使用UTF-8编码,用GBK进行编码的话,终端需要进行解码; 2.如果使用UTF-8进行解码,当前获取到的数据不完整,UTF-8解码会不成功,可以使用string_decoder模块进行安全解码。
多谢,回复晚了,见谅
@tong3jie 多谢,回复太迟,见谅。我后来有点儿想明白了,如果要做一个完整的这种程序,必须自己设计一个客户端是吗?因为用 windows 的 命令行界面确实无法正确输入中文。