为了账号安全,请及时绑定邮箱和手机立即绑定

如何连接到 TCP 服务器并将 Javascript 传递给它

如何连接到 TCP 服务器并将 Javascript 传递给它

catspeake 2023-05-19 19:51:53
我绝对是 JS 和节点的新手。我有一个名为 SkyX Pro 的望远镜管理软件,它能够在端口 3040 上运行 TCP 服务器。我可以使用 Netcat 连接到它,并给它一个以 //* Javascript *// 开头的 Javascript,这有效并允许我启动相机和其他设备并发送拍照命令等。问题是它需要从批处理文件运行,这使得很难将任何信息返回到 HTML 页面(如相机、调焦器和滤镜轮状态和温度)。NC 调用看起来像“NC localhost 3040 < Javascript-file.js为了绕过浏览器解决本地机器安全问题,我想从 node.js 运行它,如果可能的话可能使用 socket.io-client,但我不知道它的正确语法。我已经看到很多客户端语法发送你好等,但没有发送 javascript 并允许我可以理解的双向连接。我试过使用:var socket = io.connect('http://localhost');`enter code here`socket.on('httpServer', function (data) {console.log(data);document.write(data + "\r\n");socket.emit('tcp', "For TCP");});const net = require('net');const client = new net.Socket();client.connect({ port: 3040, host: process.argv[2] });client.on('data', (data) => {console.log(data.toString('utf-8'));但我对它的理解还不够深入,无法解决它为什么不起作用的问题。任何帮助都会很棒,请像对待需要一步一步的婴儿一样对待我。
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

我们可以假设 socket-io 不适合您,因为您拥有的服务器听起来像是典型的 tcp-socket 服务器,而不是 socket.io 服务器(需要特殊的标头)或 web-套接字服务器。


所以你只需要“网络”库来完成这项工作。


const net = require('net');


// module to send a message to TCP-socket server and wait for the response from socket-server

const sendAndReceive = async (client, message) => {


  client.write(message);


  let response = null

  await ( new Promise( (resolve, reject) => {

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

      response = data;

      resolve()

    });

  }))


  return response;


}


// send a single message to the socket-server and print the response

const sendJSCode = (message) => {


  // create socket-client

  const client = new net.Socket();

  client.connect(3040, 'localhost', async function() {

    console.log('Connected');


    // send message and receive response

    const response = await sendAndReceive(client, message)


    // parse and print repsonse string

    const stringifiedResponse = Buffer.from(response).toString()

    console.log('from server: ', stringifiedResponse)


    // clean up connection

    client.destroy()


  });



}


sendJSCode('var Out; \n Out="TheSky Build=" + Application.build \n\r')

  • 该脚本将:

    • 启动套接字客户端

    • 连接成功,客户端发送消息

    • 客户端收到来自该消息的回复

    • 客户端打印对终端的响应

  • 请注意,TheSkyX 对每条消息有 4096 字节的限制,超过这个限制,我们将需要对消息进行分块。所以你可能希望保持 js 代码简短和精确。

  • 我给出的那个片段是最小的,它不处理来自服务器的错误。如果你愿意,你可以添加client.on("error", .. )来处理它。

  • 您直接从浏览器连接到套接字服务器的观点非常有趣,不幸的是,出于安全考虑,现代浏览器本身不允许这样做



查看完整回答
反对 回复 2023-05-19
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号