Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Fehler bei Verwendung des 'net' Modules

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Fehler bei Verwendung des 'net' Modules

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      paulinchen last edited by paulinchen

      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.

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @paulinchen last edited by

        @paulinchen

        Keine Ahnung ob ich da recht habe, aber in der doku steht das so: const net = require('node:net');

        https://nodejs.org/api/net.html#net

        P 1 Reply Last reply Reply Quote 0
        • P
          paulinchen @ticaki last edited by

          @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 $
          
          
          OliverIO 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @paulinchen last edited by OliverIO

            @paulinchen

            Wenn du net in der config einträgst
            Dann entspricht das dem Befehl npm install net

            Dadurch installierst du die folgende Bibliothek
            https://www.npmjs.com/package/net

            Notiere den Import so wie gerade besprochen
            Und entferne net wieder aus der config

            node:net ist fest in Node eingebaut

            P 1 Reply Last reply Reply Quote 0
            • P
              paulinchen @OliverIO last edited by

              @oliverio
              Vielen Dank für Deine Erklärung.

              Jetzt funktionieren beide Versionen des Scripts! Vielen Dank.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              653
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              3
              5
              197
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo