NEWS
Mini web service
-
Hallo,
ich wollte einen kleinen web Server einrichten, der zunächst einfach nur "hört" wenn ein Client etwas schickt…
var net = require('net'); var host='127.0.0.1'; var port=9876; var textChunk = ''; var server = net.createServer(function(socket) { console.log("Starte Server..."); socket.write('Echo server\r\n'); socket.on('data', function(data){ console.log(data); textChunk = data.toString('utf8'); console.log(textChunk); socket.write(textChunk); }); }); server.listen(port,host);
starte ich das script, dann bekomme ich folgenden Fehlermeldung:
` > javascript.0 2018-03-05 09:25:04.846 error at process._tickCallback (internal/process/next_tick.js:104:9)javascript.0 2018-03-05 09:25:04.846 error at _combinedTickCallback (internal/process/next_tick.js:83:11)
javascript.0 2018-03-05 09:25:04.846 error at net.js:1408:9
javascript.0 2018-03-05 09:25:04.846 error at listen (net.js:1298:10)
javascript.0 2018-03-05 09:25:04.846 error at Server._listen2 (net.js:1262:14)
javascript.0 2018-03-05 09:25:04.846 error at exports._exceptionWithHostPort (util.js:1043:20)
javascript.0 2018-03-05 09:25:04.846 error at Object.exports._errnoException (util.js:1020:11)
javascript.0 2018-03-05 09:25:04.846 error Error: listen EADDRINUSE 127.0.0.1:9876
javascript.0 2018-03-05 09:25:04.844 error uncaught exception: listen EADDRINUSE 127.0.0.1:9876 `
mir ist nicht klar, warum der Server nicht startet,
ist es nicht möglich, mehrere "Services" mit unterschiedlichen Ports zu starten/laufen zu lassen?
wo ist mein Denkfehler?
-
Also erstmal hast du geschaut ob der port überhaupt frei ist?
Dann wie oft hast du das Skript gestartet bevor die Meldung kam?
Es ist so das der Listener auch dann weiter läuft wenn du das Skript beendest. Du musst dir also einen "Schalter" bauen mit dem du den Listener beenden kannst.
-
das passiert gleich beim ersten mal…
Ohh, das wußte ich nicht,
Port ist sicher frei...auf dem Raspberry (meinem ioBroker Rechner )
aber wie mache ich das mit dem "Schalter"?
wie beende ich den listener?
-
Du musst was in die Richtung bauen:
({id: "javascript.0.stopListener", val: true} ,function(){ server.close(log('Listener gestoppt') })
Außerdem solltest du statt deines "socket.on" in der Server Deklaration "server.on" außerhalb verwenden.
Darüber hinaus ist auf console.log zu verzichten und nur log zu verwenden, da die Formatierung im Admin Log sonst fehlt.
var net = require('net'); var host='127.0.0.1'; var port=9876; var textChunk = ''; var server = net.createServer(function(socket) { log("Starte Server..."); socket.write('Echo server\r\n'); }); server.listen(port,host); server.on('data', function(data){ log(data); textChunk = data.toString('utf8'); log(textChunk); server.write(textChunk); });
Was gibt den
netstat -an |grep LISTEN
aus?
-
netstat -an…
gibt folgendes aus:
pi@raspberrypi:/opt/iobroker/etc $ netstat -an |grep LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9876 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::8081 :::* LISTEN
tcp6 0 0 :::8082 :::* LISTEN
tcp6 0 0 :::8084 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
d.h. da läuft noch eine listener?
-
Die Suche im Forum nach 9876 bringt ein paar Ergebnisse, wobei ich nicht weiß ob das etwas für dich ist.
Gruß
Rainer
-
> Die Suche im Forum nach 9876 bringt ein paar Ergebnisse, wobei ich nicht weiß ob das etwas für dich ist.
nein, habe nix mit "broadlink" zu tun…ich habe auch schon einen anderen Port genommen...
auch mit deinem Code tut sich nix...
-
ich habe auch schon einen anderen Port genommen…
auch mit deinem Code tut sich nix... `
Es kommt aber kein Fehler oder?
Was sollte sich den tun? Schwierig zu sagen wo das Problem liegt wenn man keine Ahnung hat was passieren sollte.
Kannst du den an deinem Client sehen ob er eine Nachricht verschickt und ob er eine Antwort bekommt.
Gut möglich das einfach keine Ausgabe erfolgt trotz funktionierender Verbindung.
-
nein, jetzt kommt kein Fehler, der Server scheint zu laufen,
aber auf der Client Seite ( einfacher Test mit putty)
bekomme ich ein .. Connection refused…
-
hab jetzt Javascript neu gestartet…
jetzt bekomme ich am Client das "Echo Server", aber alles was ich am Client eintippe, kommt nicht am Server an...
server.on('data', function(data){ log(data.toString); textChunk = data.toString('utf8'); log(textChunk); server.write(textChunk); });
müßte doch jetzt die Zeichen vom Client ausgeben…?