-1

如果客户端发送 JSON,我的 TCP 套接字数据处理程序在 try 块中工作正常。但是,我还想通过 telnet 支持一些基本的“终端命令”,所以如果解析器失败,catch 块应该尝试识别支持的,但我总是得到默认响应 SyntaxError ...

socket.on('data', function(data){

        try{

            var json = JSON.parse(data);

            switch(json.event){

                default:
                    console.log('unhandled event:'+json.event);
                break;

            }

        }catch(err){

            console.log("CLIENT SAID: "+data);

            switch(data){

                case "echo":
                    socket.write("ECHO:"+data+"\n");
                break;

                case "clients":
                    socket.write("CLIENTS:"+clients.length+"\n");
                break;

                default:
                    socket.write('ERROR:'+err+"\n");
                break;
            }

        }

    });
4

1 回答 1

2

您不接受完整的回复。您应该从流中收集数据并等到end事件完全接收到数据。

var body = '';

socket.setEncoding('utf8');
socket.on('data', function(data) {
  body += data;
});

socket.on('end', function () {
  try {
    var json = JSON.parse(body);
    switch (json.event) {
      default: console.log('unhandled event:' + json.event);
      break;
    }
  } catch (err) {
    console.log("CLIENT SAID: " + body);
    switch (data) {
    case "echo":
      socket.write("ECHO:" + body + "\n");
      break;
    case "clients":
      socket.write("CLIENTS:" + clients.length + "\n");
      break;
    default:
      socket.write('ERROR:' + err + "\n");
      break;
    }
  }
});
于 2013-09-25T04:59:59.100 回答