socket.on('data', function(data){
if(data.toString()=='<policy-file-request/>\0'){
socket.end(XML);
console.log('客户端flash已与服务器建立连接,可以正常传输数据了!');
}else{
sockets.push(socket);
console.log(sockets.length);
getdata = JSON.parse(data);
console.log(getdata.login);
socket.write(getdata.login);
}
});
5 回复
如果没有调用socket.setEncoding();
,回调中拿到的data
就是一个Buffer
对象,Buffer直接toString()
的话,默认编码是utf-8
,所以乱码的话可能是客户端传输的编码不是utf-8
?
另外一个问题是,你从socket读数据的方式不对,TCP是面向字节流的,data事件触发的时候,你未必就能一次拿到全部json数据(它可能被切成一段一段的发过来,尤其是网络不好的情况下),一般的处理方式有两种:对端先发送数据长度,然后这别先读到长度,这样把后面的数据都buffer起来,直到读够了指定长度的数据,这时你才能确定这段数据传完了。另一种方式是:采用特定的分隔符号,比如用\r\n
分隔每段json数据,这样也是先buffer,然后每读到一个\r\n
就知道一段完整的json收到了。
再有一个问题是,node.jsv0.10中stream有一些变化,如果你在用新版本的话,建议使用新的API:
socket.on('readable', function () {
var data = socket.read();
});