NEWS
[gelöst] Fehler bei Verwendung des 'net' Modules
-
Hallo,
ich möchte in einem JS ein paar TCP-Daten an einen Server schicken.
Dazu wollte ich das 'net' Modul von node.js verwenden.Also habe ich in den Instanzeinstellungen des JavaScript-Adapters unter "Additional npm modules" das Modul "net" eingetragen.
Das Log brachte keine Fehler:javascript.0 2025-03-11 12:04:43.952 debug Installed custom library: "net@latest" javascript.0 2025-03-11 12:04:37.797 debug Found custom library in config: "net@latest" javascript.0 2025-03-11 12:04:37.675 debug Installed custom library: "axios@latest" javascript.0 2025-03-11 12:04:31.536 debug Found custom library in config: "axios@latest" javascript.0 2025-03-11 12:04:31.487 debug Installed custom library: "mail-listener4@latest" javascript.0 2025-03-11 12:04:24.925 debug Found custom library in config: "mail-listener4@latest" javascript.0 2025-03-11 12:04:24.923 debug Found installed libraries: ["axios","mail-listener4"] javascript.0 2025-03-11 12:04:24.897 debug Custom libraries in config: "mail-listener4 axios net": ["mail-listener4","axios","net"]
Unter Putty sieht es so aus:
pi@raspi4:~ $ node -v v20.18.3 pi@raspi4:~ $ nodejs -v v20.18.3 pi@raspi4:~ $ npm -v 10.8.2 pi@raspi4:~ $ cd /opt/iobroker pi@raspi4:/opt/iobroker $ npm ls --depth 0 iobroker.inst@3.0.0 /opt/iobroker ├── @iobroker-javascript.0/axios@npm:axios@1.8.2 ├── @iobroker-javascript.0/mail-listener4@npm:mail-listener4@1.1.3 ├── @iobroker-javascript.0/net@npm:net@1.0.2 ├── iobroker.adguard@1.0.1 ├── iobroker.admin@7.5.2 ├── iobroker.alexa2@3.26.7 ├── iobroker.backitup@3.1.0 ├── iobroker.daswetter@3.2.3 ├── iobroker.email@1.3.1 ├── iobroker.ical@1.16.1 ├── iobroker.javascript@8.9.1 ├── iobroker.js-controller@7.0.6 ├── iobroker.mqtt@6.1.2 ├── iobroker.ping@1.7.9 ├── iobroker.pvforecast@4.1.0 ├── iobroker.samsung@0.6.1 ├── iobroker.simple-api@2.8.0 ├── iobroker.sonoff@3.2.1 ├── iobroker.tr-064@4.3.0 ├── iobroker.tuya@3.17.0 └── iobroker.zigbee@1.10.14
Was mich allerdings gewundert hat:
Unter "/opt/iobroker/node_modules" ist 'net' nicht zu finden? Ich dachte, dies wäre Bestandteil von node.js?Mein JS sieht so aus:
var net = require('net'); // Node.js Modul für TCP-Verbindungen /** * Sendet HEX-Daten an eine angegebene IP-Adresse und Port. * @param {string} ipAddress - Die Ziel-IP-Adresse. * @param {number} port - Der Ziel-Port. * @param {string} hexData - Die HEX-Daten, die gesendet werden sollen. */ function sendHexData(ipAddress, port, hexData) { // Umwandlung der HEX-Daten in ein Buffer-Objekt const bufferData = Buffer.from(hexData, 'hex'); // Verwendung von net.connect() anstelle von new net.Socket() const client = net.connect(port, ipAddress, function() { console.log('Verbunden mit: ${ipAddress}:${port}'); // Senden der HEX-Daten an den Server client.write(bufferData, function() { console.log('Daten gesendet: ${hexData}'); }); }); // Ereignisbehandlung bei Empfang von Daten vom Server client.on('data', function(data) { console.log('Daten empfangen: ' + data.toString()); }); // Ereignisbehandlung bei Verbindungsfehler client.on('error', function(err) { console.error('Verbindungsfehler: ' + err.message); }); // Ereignisbehandlung bei Verbindungsende client.on('close', function() { console.log('Verbindung geschlossen'); }); } // Beispielaufruf der Funktion mit dynamischen Parametern const ipAddress = '192.168.1.243'; // Ziel-IP-Adresse const port = 8899; // Zielport const hexData = '553361390201020A93A2AAAA'; // Funktion mit den obigen Parametern aufrufen sendHexData(ipAddress, port, hexData);
Es erzeugt allerdings den Fehler:
TypeError: net.connect is not a function
Eine 2. Version des Scriptes:
var net = require('net'); // Node.js Modul für TCP-Verbindungen /** * Sendet HEX-Daten an eine angegebene IP-Adresse und Port. * @param {string} ipAddress - Die Ziel-IP-Adresse. * @param {number} port - Der Ziel-Port. * @param {string} hexData - Die HEX-Daten, die gesendet werden sollen. */ function sendHexData(ipAddress, port, hexData) { // Umwandlung der HEX-Daten in ein Buffer-Objekt const bufferData = Buffer.from(hexData, 'hex'); // Erstellung des TCP-Clients const client = new net.Socket(); // Verbindung mit dem Ziel-Server client.connect(port, ipAddress, function() { console.log('Verbunden mit: ${ipAddress}:${port}'); // Senden der HEX-Daten an den Server client.write(bufferData, function() { console.log('Daten gesendet: ${hexData}'); }); }); // Ereignisbehandlung bei Empfang von Daten vom Server client.on('data', function(data) { console.log('Daten empfangen: ' + data.toString()); }); // Ereignisbehandlung bei Verbindungsfehler client.on('error', function(err) { console.error('Verbindungsfehler: ' + err.message); }); // Ereignisbehandlung bei Verbindungsende client.on('close', function() { console.log('Verbindung geschlossen'); }); } // Beispielaufruf der Funktion mit dynamischen Parametern const ipAddress = '192.168.1.243'; // Ziel-IP-Adresse const port = 8899; // Zielport const hexData = '553361390201020A93A2AAAA'; //HEX-Daten // Funktion mit den obigen Parametern aufrufen sendHexData(ipAddress, port, hexData);
Dieses Script bringt den Fehler:
TypeError: net.Socket is not a constructor
Hätte bitte jemand einen Tipp für mich, wo der Fehler liegt?
Vielen Dank. -
Keine Ahnung ob ich da recht habe, aber in der doku steht das so:
const net = require('node:net');
-
@ticaki
Danke für den Tipp, aber die Fehlermeldungen bleiben leider gleich?Noch ein Nachtrag:
Die Dateien von 'net' sehe ich hier, aber soll das alles sein?pi@raspi4:/opt/iobroker/node_modules/@iobroker-javascript.0/net $ ls index.js LICENSE package.json README.md test.js pi@raspi4:/opt/iobroker/node_modules/@iobroker-javascript.0/net $
-
Wenn du net in der config einträgst
Dann entspricht das dem Befehl npm install netDadurch installierst du die folgende Bibliothek
https://www.npmjs.com/package/netNotiere den Import so wie gerade besprochen
Und entferne net wieder aus der confignode:net ist fest in Node eingebaut
-
@oliverio
Vielen Dank für Deine Erklärung.Jetzt funktionieren beide Versionen des Scripts! Vielen Dank.