Подключиться к устройству через UDP с nodejs - PullRequest
0 голосов
/ 09 мая 2020

У меня есть устройство TCP / IP, на котором я написал сценарий в python для подключения и получения данных, и это работает. Теперь я пытаюсь сделать что-то подобное с nodejs, но продолжаю сталкиваться либо с ошибками подключения, либо с проблемами безопасности с буфером в зависимости от методов nodejs, которые я пробовал.

Это сценарий python, который работает;

 import socket
 import csv
 import datetime
from decimal import Decimal
import time

UDP_IP = "10.0.0.122"
UDP_PORT = 1025
MESSAGE = "#01\r"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE.encode(encoding='utf-8'), (UDP_IP, UDP_PORT))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", str(data))

Вот 3 метода, которые я пробовал с различными ошибками, перечисленными в комментариях в js. Я новичок в node js, и мне действительно нужна помощь.

Заранее спасибо

 // //Method 1 

// var net = require('net');

// var client = new net.Socket();
// client.connect(1025, '10.0.0.122', function() {
//  console.log('Connected');
//  client.write('Hello, server! Love, Client.');
// });

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

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


//Method 2

// // Include Nodejs' net module.
// const Net = require('net');
// // The port number and hostname of the server.
// const port = 1025;
// const host = '10.0.0.122';

// // Create a new TCP client.
// const client = new Net.Socket();
// // Send a connection request to the server.
// client.connect({ port: port, host: host }), function() {
//     // If there is no error, the server has accepted the request and created a new 
//     // socket dedicated to us.
//     console.log('TCP connection established with the server.');

//     // The client can now send data to the server by writing to its socket.
//     client.write('#01\r');
// };

// // The client can also receive data from the server by reading from its socket.
// client.on('data', function(chunk) {
 //     console.log(`Data received from the server: ${chunk.toString()}.`);

//     // Request an end to the connection after the data has been received.
//     client.end();
// });

// client.on('end', function() {
//     console.log('Requested an end to the TCP connection');
// });

 //Method 1 and 2 give this error

 // events.js:287
  //       throw er; // Unhandled 'error' event
//       ^

// Error: connect ECONNREFUSED 10.0.0.122:1025
/ /     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
// Emitted 'error' event on Socket instance at:
//     at emitErrorNT (internal/streams/destroy.js:92:8)
//     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
//     at processTicksAndRejections (internal/process/task_queues.js:84:21) {
//   errno: 'ECONNREFUSED',
//   code: 'ECONNREFUSED',
//   syscall: 'connect',
//   address: '10.0.0.122',
//   port: 1025
// }

//Method 3
var PORT = 1025;
var HOST = '10.0.0.122';

 var dgram = require('dgram');
var message = new Buffer('#01\r');

var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
if (err) throw err;
 console.log('UDP message sent to ' + HOST +':'+ PORT);
 client.close();
});

//Method 3 error

// [Running] node "c:\Users\admin\Nodejs tcp test\app.js"
// (node:6032) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability 
issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
// UDP message sent to 10.0.0.122:1025

// [Done] exited with code=0 in 0.155 seconds

1 Ответ

0 голосов
/ 09 мая 2020

Я понял это с небольшой помощью Google. Есть несколько хороших примеров для UDP-соединения в js.

С указателем в правильном направлении из проекта Rodrigoms github, https://github.com/rodrigoms2004/ServerSocketTCP_UDP

Мне удалось добиться того же, что и в моем файле python, используя следующий код.

 const udp = require('dgram')


// creating a client socket
const client = udp.createSocket('udp4')

//buffer msg
const data = Buffer.from('#01\r')

client.on('message', (msg, info) => {
console.log('Data received from server : ' + msg.toString())
console.log('Received %d bytes from %s:%d\n', msg.length, info.address, info.port)
})

//sending msg
client.send(data, 1025, '10.0.0.122', error => {
if (error) {
    console.log(error)
    client.close()
} else {
    console.log('Data sent !!!')
}
})

setTimeout( () => {
client.close()
},1000)
...