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

我绝对是 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'));

但我对它的理解还不够深入,无法解决它为什么不起作用的问题。


任何帮助都会很棒,请像对待需要一步一步的婴儿一样对待我。


catspeake
浏览 181回答 1
1回答

慕斯709654

我们可以假设 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-serverconst 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 responseconst 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", .. )来处理它。您直接从浏览器连接到套接字服务器的观点非常有趣,不幸的是,出于安全考虑,现代浏览器本身不允许这样做
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript