【问题标题】:How can I send data from javascript to a node.js TCP server?如何将数据从 javascript 发送到 node.js TCP 服务器?
【发布时间】:2021-09-05 03:37:03
【问题描述】:

我目前正在尝试为StreamDeck 编写一个插件,以将TCP messages 发送到同一网络上的一台没有互联网连接的计算机。所以我必须在按下按钮时发送特定消息,但我不知道如何将数据从我的javascript 文件传递​​到我的node.js TCP server。请问有人可以帮我吗?

【问题讨论】:

  • 如果您在两端显示一些代码示例,这样我们就知道您在处理什么,那就太好了。有很多图书馆...
  • 部分问题请参见Establishing your own protocol on TCP

标签: javascript node.js plugins tcp streamdeck


【解决方案1】:

是的,抱歉,所以在我的 JS 代码中,当用户按下键时,我会发送一个 HTTP 请求:

onKeyUp: async function (jsn, mode) {
    const order = structureMessage(jsn, mode);
    console.log(order);
    try {
        console.log(`[onKeyUp] ${JSON.stringify(jsn)}`);
        const raw = await fetch(jsn.payload.settings.targetUrl, {
            method: "POST", 
            headers: {
                "content-type": "application/json"
            },
            body: JSON.stringify({message: order})
        })
        const respData = await raw.text();
        console.log(respData);
    }
    catch(error) {
        console.error(error);
    }
}

函数 structureMessage 会给我一个字符串,它对应于 CII 协议的消息。

这是我服务器的代码:

const host = '127.0.0.1';
const HTTPport = '8080';
const TCPport = '8081';

const CIIconnection = require('./connection.js');
const CII = new CIIconnection(host, TCPport);

const net = require('net');
const serverTCP = new net.createServer();
let sockets = [];
serverTCP.on('connection', (socket) => {
  console.log('new Client');
  sockets.push(socket);
  socket.setEncoding("utf8");

  socket.on('data', (data) => {
    console.log('receive data from socket : ', data);
    socket.write('*ok\r\n')
  });
  socket.on('end', function () {
    sockets.splice(sockets.indexOf(socket), 1);
    console.log('socket end');
  });
});
serverTCP.listen(TCPport, host, () => {
  console.log(`Server TCP running at http://${host}:${TCPport}`);
});

const express = require('express');
const appHTTP = express();
appHTTP.use(express.urlencoded({ extended: true }));
appHTTP.use(express.json());
appHTTP.post('/myaction', async function (req, res) {
  res.send('You sent "' + req.body + '".');
  try {
    await CII.sendCommand(req.body.message);
    console.log('commande envoyé')
  } catch (error) {
    console.error(error);
  }
});
appHTTP.listen(HTTPport, host, async () => {
  console.log(`Server HTTP running at http://${host}:${HTTPport}`);
  await init();
});

async function init() {
  try {
    await CII.connect();
  } catch (e) {
    console.error(e);
  }
}

我想要的是直接将数据发送到我正在创建的 TCP 客户端并且不使用 HTTP 服务器。有可能吗?

我是新手,所以我不知道你是否会理解这段代码,但无论如何谢谢。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2019-03-12
    • 2020-09-03
    • 2012-04-03
    • 2016-07-12
    • 1970-01-01
    • 2023-03-08
    • 2019-12-22
    相关资源
    最近更新 更多