Hallo,
ich bin ein Neuling in der NodeJS Entwicklung und habe eine Frage. Ich
habe mir einen kleinen Server geschrieben, der die Ports und Adressen
der Clients mitloggen soll. Diese werden in einer globalen Variable
gespeichert.
Leider verhält es sich so, dass die bei mehrmaligen Empfangen von
Nachrichten die Adressen im Array verloren gehen. Es ist immer nur die
Adresse des letzten Pakets gespeichert. Kann mir da jemand weiterhelfen?
Wahrscheinlich habe ich ein grundsätzliches Problem beim Verständnis von
Javascript. Die Ausgabe nach drei Nachrichten sieht wie folgt aus:
Server listening on 255.255.255.255:7772
new client at 192.168.178.23:47696
[ { addr: '192.168.178.23', port: 47696 } ]
new client at 192.168.178.23:35086
[ { addr: false, port: 47696 },
{ addr: '192.168.178.23', port: 35086 } ]
new client at 192.168.178.23:38922
[ { addr: false, port: 47696 },
{ addr: false, port: 35086 },
{ addr: '192.168.178.23', port: 38922 } ]
1 | var net = require('net');
|
2 | var dgram = require('dgram');
|
3 |
|
4 | function ClientList () {
|
5 | this.list = [];
|
6 |
|
7 | this.add = function (addr, port) {
|
8 | var obj = {
|
9 | addr: addr,
|
10 | port: port
|
11 | };
|
12 | this.list.push(obj);
|
13 | };
|
14 |
|
15 | this.find = function (addr, port) {
|
16 | for (i = 0; i < this.list.length; i++) {
|
17 | if(this.list[i].addr = addr && this.list[i].port == port)
|
18 | return true;
|
19 | }
|
20 | return false;
|
21 | };
|
22 | }
|
23 |
|
24 | var clients = new ClientList();
|
25 | var server = dgram.createSocket('udp4');
|
26 |
|
27 | server.on('listening', function () {
|
28 | var address = server.address();
|
29 | console.log('UDP Server listening on ' + address.address + ":" + address.port);
|
30 | });
|
31 |
|
32 | server.on('message', function (message, remote) {
|
33 |
|
34 | if(clients.find(remote.address, remote.port) == false)
|
35 | {
|
36 | console.log("new client at " + remote.address + ':' + remote.port );
|
37 |
|
38 | clients.add(remote.address, remote.port);
|
39 |
|
40 | console.log(clients.list);
|
41 | }
|
42 |
|
43 | });
|
44 | server.bind(7772, '255.255.255.255');
|