Узел Js TCP-клиент не получает данные в цикле - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно непрерывное получение данных. но я попытался без setinterval (), но безуспешно. Затем я попробовал setinterval (), но безуспешно. Я получаю первый ответ после отправки сообщения. Безуспешно, пожалуйста, помогите мне. это вывод; [введите описание изображения здесь] [1]

var HOST = '202.71.103.XXX';
var PORT = XXXX;
var client = new net.Socket();
client.connect(PORT, HOST, function() {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
    client.write('init');
    setInterval(getData, 1000);
});

function getData() {
    console.log('fun called')
    client.on('data', function(data) {
        console.log('Get Data: ' + data)
        Cdata = JSON.parse(data.slice(0, -2))
        if (Cdata.ServerDist == 1) {
            var sentMsg = '{"ClientID":"' + Cdata.ClientID + '","TrackSystemNos":"13992881XXX|"}';  
            client.write(sentMsg)
            console.log('Sent Msg: ' + sentMsg)
        }
    });
}


  [1]: https://i.stack.imgur.com/7Mt0Y.png

1 Ответ

0 голосов
/ 10 ноября 2019

Хорошо, поэтому я не уверен на 100%, в чем заключается ваша конкретная проблема, но я написал простой клиент и сервер на основе вашего кода, и он работает довольно хорошо, поэтому посмотрите, поможет ли это вам.

Сервер:

const net = require('net');

var dummy = {
    ServerDist: 1
};

var server = net.createServer(function(socket) {
    let temp = JSON.stringify(dummy)
    console.log(temp);
    socket.write(temp);
    socket.on('data', data => {
        let temp = JSON.stringify(dummy);
        console.log(temp);
        socket.write(temp);
    });
});

server.listen(1337, '127.0.0.1');

Клиент

var net = require('net');

var HOST = '127.0.0.1';
var PORT = 1337;
var client = new net.Socket();
client.connect(PORT, HOST, function () {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
    client.write('init');
});

client.on('data', function (data) {
        console.log('Get Data: ' + data);
        let Cdata = JSON.parse(data);
        if (Cdata.ServerDist === 1) {
            let sentMsg = {ClientID: 'Bob', TrackSystemNos: '13992881XXX'};
            client.write(JSON.stringify(sentMsg));
            console.log('Sent Msg: ' + JSON.stringify(sentMsg))
        }
    }
);

Вывод:

Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}
Get Data: {"ServerDist":1}
Sent Msg: {"ClientID":"Bob","TrackSystemNos":"13992881XXX"}

Старый ответ Я считаю вашу проблемуsetinterval - это асинхронный вызов. Поэтому, как только вы вызываете его, код продолжает выходить из функции соединения (скорее всего, завершает соединение). Setinterval получает первый ответ, потому что он существует от вызова до закрытия, но, поскольку соединение закрыто, он больше не получает.

Вы пытались использовать цикл while внутри соединения, чтобы держать соединение открытым?

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