Создание net .Socket соединения с удаленным портом в конечной точке API узла - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть случай, когда мне нужно подключиться к удаленному сокету и отправить входящую полезную нагрузку 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');
});

Может кто-нибудь помочь мне понять, где я делаю неправильно?

Я согласен с любым другим решением, как хорошо. По сути, я хочу подключиться к серверу сокетов с сервера узлов. Нет ограничений на библиотеки.

1 Ответ

0 голосов
/ 23 апреля 2020

Вы должны поместить свой код:

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){ ....

В противном случае соединение будет открыто только тогда и только тогда, когда будет достигнут этот маршрут. Более того, поскольку новый экземпляр сокета net создается под пост-маршрутом, он будет ограничен как переменные области видимости блока и недоступен для других маршрутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...