Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js:如何在单个端口上侦听通信和响应_Javascript_Node.js_Sockets_Port - Fatal编程技术网

Javascript Node.js:如何在单个端口上侦听通信和响应

Javascript Node.js:如何在单个端口上侦听通信和响应,javascript,node.js,sockets,port,Javascript,Node.js,Sockets,Port,我目前正在Node.js中为PHP构建远程调试客户端,允许远程调试的PHP库通过localhost上的端口9000发送消息,因此远程调试客户端可以侦听消息并在同一主机和端口上响应 因此,我制作了一个TCP服务器,它监听端口9000,并在解析数据后做出相应的响应: var net = require('net'); var transactionID = 1234; var parseXMLString = require('xml2js').parseString; /** * Create

我目前正在Node.js中为PHP构建远程调试客户端,允许远程调试的PHP库通过localhost上的端口9000发送消息,因此远程调试客户端可以侦听消息并在同一主机和端口上响应

因此,我制作了一个TCP服务器,它监听端口9000,并在解析数据后做出相应的响应:

var net = require('net');
var transactionID = 1234;
var parseXMLString = require('xml2js').parseString;

/**
 * Create a server to respond to the debugger engine.
 *
 * @param  {Socket} connection
 */
var server = net.createServer(function(socket) { //'connection' listener
  console.log('socket connected to server');
  socket.on('end', function() {
    console.log('socket disconnected to server');
  });
  /**
   * When the debugger engine sends a message over port 9000,
   * send a response.
   *
   * @param  {Buffer} data
   */
  socket.on('data', function(data) {
    // Data comes through as a buffer, stringify it.
    var dataStringified = data.toString(),
      splitData = null,
      xmlStatement = null,
      dataLength = null;
    // Data comes through as a string separated by a null byte, so split it up.
    splitData = dataStringified.split('\u0000');
    dataLength = splitData[0];
    xmlStatement = splitData[1];
    parseXMLString( xmlStatement, function( err, result ) {
      if ( 'init' in result ) {
        var command = 'run -i 1234';
        socket.write( command );
      }
    });
  });
  // socket.pipe(socket);
});

/**
 * Listen to port 9000 to create connections from the debugger engine to the server.
 */
server.listen(9000, function() { //'listening' listener
  console.log('server listening on port 9000');
});
但是,套接字/端口未写入

我已经看到在其他服务器示例中使用了
socket.pipe(socket)
。如果代码中的这一行没有注释,端口确实会被写入,但是,它会建立一个循环连接,从XDebug发送的任何消息都会被发送回自己


我遗漏了什么?

请你再解释一下,谁在和谁说话?您的节点脚本将在端口9000上侦听,XDebug(来自另一台服务器?)将连接到此端口以调试消息?@TimothyHa当然!我编辑后提到XDebug在本地主机上的9000上讲话,我的脚本通过相同的主机和端口对它讲话。您看到服务器开始监听了吗?“服务器正在侦听端口9000'-是否在控制台中?netstat-an | grep9000是否向您显示了侦听器已启动?socket.write(命令)在我看来很好。我还会检查您是否在某些防火墙中阻止端口9000上的传出数据。是的,当我启动应用程序时,
服务器监听端口9000
,然后当我初始化调试器引擎时,
连接到服务器的套接字。因此,您可能永远不会进入if条件('init'结果)。你能在那里添加一些console.log吗?