【问题标题】:Send simple TCP messages in JavaScript, similarly to Python .socket在 JavaScript 中发送简单的 TCP 消息,类似于 Python .socket
【发布时间】:2020-10-31 12:37:22
【问题描述】:

来自 Python,我正在尝试使用 JavaScriptnode.js 实现类似的结果。

我正在尝试通过网络发送简单的 TCP 消息。在Python 中,我将通过以下方式实现:

import socket

device_ip = '192.168.0.10'
device_port = 20000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect((device_ip, device_port))

command = ('Message to be sent to device here')
s.sendall(command.encode())
s.recv(4096)

我查看了 node 的 socket.io 模块,但在 Python 中找不到像上述解决方案一样简单的东西。

device_ip 末尾的设备会响应消息,只要它是 TCP 编码的,然后它会返回一个 Ack 消息,JS 可以有效地忽略它。 Ack 消息仅作为发送另一条消息之前的简单握手存在。 我的Python 代码可以正常工作,但我发现自己需要使用JSNode 运行它。

【问题讨论】:

    标签: javascript python node.js sockets tcp


    【解决方案1】:

    Node 提供了Net-module,它基本上允许您创建 tcp-server 和客户端套接字。这是一个非常简单的服务器套接字示例:

    const net = require('net');
    const server = net.createServer((c) => {
        console.log('client connected');
        c.on('end', () => {
            console.log('client disconnected');
        });
        c.write('hello\r\n');
        c.pipe(c);
    });
    
    server.listen(20000, () => {
        console.log('server socket listening ...');
    });
    

    下面是对应客户端套接字的代码:

    const net = require('net');
    const client = net.createConnection({ port: 20000}, () => {
        client.write('world!\r\n');
    });
    client.on('data', (data) => {
        console.log(data.toString());
        client.end();
    });
    

    【讨论】:

    • 所以这并没有完全回答这个问题,但它确实给了我解决这个问题的方法,所以谢谢你。我结束了以下。 var client = new net.Socket(); client.connect(PORT, IP_ADDRESS, function() { client.write('Command1'); client.write('Command2'); } 但是我现在需要的是确认客户端在 'Command2' 之前返回的 ACK 消息正在发送。我认为这将在socket.write(data[, encoding][, callback]) 的回调部分完成,但是我完全不知道如何实现这一点......
    • 我不是 100% 确定,但也许是这样的? codesandbox.io/s/recursing-cray-6kvdi(这不会在代码沙箱中运行,但您可以复制文件并在您的机器上执行)。基本上我正在做的是将服务器和客户端都包装在一个类中,并限制客户端中的发送/接收消息,直到服务器发送ACK。看看吧:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2018-01-31
    • 2017-07-20
    相关资源
    最近更新 更多