我想知道是否有人可以帮助我。我是nodejs的新手,我一直在尝试使用nodejs作为客户端向服务器发送消息。服务器是用C语言编写的,在查看PHP安装时,它使用pack('N',len)将字符串的长度发送到服务器。我试图在javascript中实现类似的东西,但我遇到了一些问题。我想知道你是否可以指出我出错的地方(从我复制打包字符串代码的地方获得phpjs)。
我的客户端nodejs javascript代码是:
var net = require('net');
var strs = Array("<test1>1</test1>",`
"<test_2>A STRING</test_2>", "<test_3>0</test_3>",
"<test_4></test_4>", "<test_5></test_5>",
"<test_6></test_6>", "<test_7_></test_7>",
"<test_8></test_8>", "<test_9>10</test_9>",
"<test_10></test_10>", "<test_11></test11>",
"<test_12></test_12>", "<test_13></test_13>",
"<test_14></test_14>");
hmsg = strs[0] + strs[1] + strs[2] + strs[3] + strs[4] + strs[5] + strs[6];
console.log(hmsg.length);
msg = hmsg + "<test_20></test_20>"`
msglen = hmsg.length;
astr = '';
astr += String.fromCharCode((msglen >>> 24) && 0xFF);
astr += String.fromCharCode((msglen >>> 16) && 0xFF);
astr += String.fromCharCode((msglen >>> 8) & 0xFF);
astr += String.fromCharCode((msglen >>> 0) & 0xFF);
var pmsg = astr + msg;
console.log(pmsg);
var client = net.createConnection({host: 'localhost', port: 1250});
console.log("client connected");
client.write(pmsg);
client.end();
运行'node testApp'打印出标题字符串的正确长度。如果我看一下服务器正在接收什么,我可以看到只要头字符串是&lt; 110个字符,它解码正确的长度,但如果标题字符串是&gt; 110(通过向hmsg添加strs [6]或更多),解码的长度是不正确的。包括strs [6]我得到一个长度为128的字符串 在客户端和服务器端194。
我显然在打包整数时做错了,但是我不熟悉打包位并且不确定我哪里出错了。任何人都可以指出我的错误在哪里? 非常感谢!
更新 感谢nodejs邮件列表上的Fedor Indutny,以下内容对我有用:
console.log(hmsg.length, msg.length);
var msglen = hmsg.length;
var buf = new Buffer(msg.length+4);
mslen = buf.writeUInt32BE(msglen, 0);
mslen = buf.write(msg, 4);
var client = net.createConnection({host: 'localhost', port: 8190});
console.log("client connected");
client.write(buf);
client.end();
即。使用Buffer的writeUInt32只是头消息长度所需要的。我在这里张贴,希望它可以帮助别人。
答案 0 :(得分:0)