【问题标题】:Making net.Socket connection to remote port in a node API endpoint在节点 API 端点中建立与远程端口的 net.Socket 连接
【发布时间】:2020-08-06 13:18:57
【问题描述】:

我有一个 ues 案例,我需要连接到远程套接字并发送传入的 HTTP 有效负载。这是我编写的示例代码,

const net = require('net');
const express = require('express');
var backendConfig = require('./backend_config')
const app = express();
const port = 8080;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/', function(req, res){
     const backendName = "UBPS";
     var client = new net.Socket();

     client.connect(backendConfig[backendName]["port"], backendConfig[backendName]["url"], function() {
     console.log('Connected');
     var a = Buffer.from(req.body.isoMessage, 'hex');
     console.log(a)
     client.write(a);
});

client.on('data', function(data) {
    console.log('Received: ' + data);
    res.send(data);
    client.end(); // kill client after server's response
});

client.on('close', function() {
    console.log('Connection closed');
});
});


app.listen(port, function () {
    console.log('Example app listening on port 8080!');
 });

当我卷曲到端点时,我收到一条消息,表明套接字已连接并且数据已写入,但是,我没有收到收到响应的消息。 还有一点,独立的 nodejs 代码工作得很好。

var client = new net.Socket();
client.connect(port, ip, function() {
    console.log('Connected');
    var a = Buffer.from("245463", 'hex');
    console.log(a)
    client.write(a);
});

client.on('data', function(data) {
     console.log('Received: ' + data);
     var b = Buffer.from(data,"str");
     console.log(b.toString());
     var a = Buffer.from(data, 'hex');
     console.log(a.toString());
     client.end(); // kill client after server's response
});

client.on('close', function() {
     console.log('Connection closed');
});

有人可以帮助我了解我做错了什么吗?

我也可以接受任何其他解决方案。本质上,我想从节点服务器连接到套接字服务器。对库没有限制。

【问题讨论】:

    标签: node.js express sockets system.net.sockets


    【解决方案1】:

    你必须输入你的代码:

    var client = new net.Socket();
    client.connect(port, ip, function() {
        console.log('Connected');
        var a = Buffer.from("245463", 'hex');
        console.log(a)
        client.write(a);
    

    在外面 app.post('/', function(req, res){ ...路线。

    否则,只有当且仅当该路由被命中时才会打开连接。此外,由于新的网络套接字实例是在 post 路由下创建的,因此它将被限制为块范围变量,并且无法从其他路由访问。

    【讨论】:

    • 感谢您的回答。您正确地提到了在 post 例程中创建新套接字的意图。我想在 post 例程中创建和终止套接字。我的问题是,不知何故服务器没有响应或我的回调函数没有被调用。我在客户端没有收到任何响应。
    • 不客气。在这种情况下,我们还需要查看客户端代码
    • 在客户端,我的意思是 curl 命令。我认为在当前代码中,问题出在 net.Socket 的异步行为上。
    • 是的。但我认为我们最好也看到前端代码,这样我们就可以知道它们如何以更好的方式连接。
    • 我不确定它会解决什么目的。看,这里的节点服务就像一个 Socket 代理。接受 HTTP 请求并将其发送到套接字服务器。这与前端如何使用它无关。
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 2019-11-27
    • 2016-04-29
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2014-01-21
    • 2021-04-18
    相关资源
    最近更新 更多