node-red-contrib-tcp-client-server-avd 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,10 +26,11 @@ npm install
26
26
  ### TCP Client Mode
27
27
  - Automatisch verbinden bij flow start (optioneel)
28
28
  - Handmatig verbinden/verbreken via messages
29
- - Automatische herconnectie met configureerbare instellingen
29
+ - Robuuste automatische herconnectie (detectie via error, close en write-fouten)
30
+ - Snelle herverbinding (standaard 2 sec, minimum 1 sec)
30
31
  - Ondersteuning voor verschillende dataformaten (String, Buffer, JSON, Hex)
31
32
  - Message delimiter ondersteuning voor message framing
32
- - Keep-alive optie
33
+ - Keep-alive optie (aanbevolen voor detectie van half-open verbindingen)
33
34
 
34
35
  ### TCP Server Mode
35
36
  - Automatisch starten bij flow start (optioneel)
@@ -198,6 +199,15 @@ Als er geen topic is opgegeven, wordt de payload automatisch verzonden.
198
199
  }
199
200
  ```
200
201
 
202
+ ### ClientId bepalen (Server Mode)
203
+
204
+ Om naar een specifieke client te sturen heb je de `clientId` nodig. Deze is beschikbaar in:
205
+
206
+ 1. **`client/connected`** – bij elke nieuwe clientverbinding
207
+ 2. **`data`** – bij elk ontvangen bericht (via `msg.clientId`)
208
+
209
+ Bewaar de `clientId` uit een van deze messages en gebruik deze in je `send` message met `clientId: msg.clientId`.
210
+
201
211
  ## Configuratie Opties
202
212
 
203
213
  ### Client Mode
@@ -207,14 +217,14 @@ Als er geen topic is opgegeven, wordt de payload automatisch verzonden.
207
217
  - **IP Versie**: IPv4 of IPv6 (standaard: IPv4)
208
218
  - **Auto Verbinden**: Automatisch verbinden bij flow start (standaard: true)
209
219
  - **Herconnectie**: Automatische herconnectie bij verbroken verbinding (standaard: true)
210
- - **Reconnect Interval**: Tijd tussen reconnect pogingen in seconden (standaard: 5)
220
+ - **Reconnect Interval**: Tijd tussen reconnect pogingen in seconden (standaard: 2, minimum: 1)
211
221
  - **Max Reconnect Pogingen**: Maximum aantal reconnect pogingen (0 = oneindig, standaard: 0)
212
- - **Connection Timeout**: Timeout voor connectiepogingen in seconden (standaard: 10)
222
+ - **Connection Timeout**: Timeout voor het opzetten van de verbinding in seconden (standaard: 10). Wordt na succesvol verbinden uitgeschakeld; geen idle-timeout.
213
223
  - **Input Format**: Data formaat voor verzenden (String, Buffer, JSON, Hex String)
214
224
  - **Output Format**: Data formaat voor ontvangen (String, Buffer, JSON, Hex String)
215
225
  - **Encoding**: Character encoding voor String format (UTF-8, ASCII, Latin1, Base64)
216
226
  - **Message Delimiter**: Optionele delimiter voor message framing (bijv. `\n` of `\r\n`)
217
- - **Keep-Alive**: TCP keep-alive optie (standaard: false)
227
+ - **Keep-Alive**: TCP keep-alive optie (standaard: false). Aanbevolen voor vroegtijdige detectie van verbroken verbindingen.
218
228
 
219
229
  ### Server Mode
220
230
 
@@ -228,7 +238,7 @@ Als er geen topic is opgegeven, wordt de payload automatisch verzonden.
228
238
  - **Output Format**: Data formaat voor ontvangen (String, Buffer, JSON, Hex String)
229
239
  - **Encoding**: Character encoding voor String format (UTF-8, ASCII, Latin1, Base64)
230
240
  - **Message Delimiter**: Optionele delimiter voor message framing (bijv. `\n` of `\r\n`)
231
- - **Keep-Alive**: TCP keep-alive optie (standaard: false)
241
+ - **Keep-Alive**: TCP keep-alive optie (standaard: false). Aanbevolen voor vroegtijdige detectie van verbroken verbindingen.
232
242
 
233
243
  ## Status Weergave
234
244
 
@@ -286,7 +296,7 @@ Een TCP client met automatische herconnectie.
286
296
  - Port: 8080
287
297
  - Auto Verbinden: aan
288
298
  - Herconnectie: aan
289
- - Reconnect Interval: 5 seconden
299
+ - Reconnect Interval: 2 seconden (of 1 voor snellere herverbinding)
290
300
  - Max Reconnect Pogingen: 0 (oneindig)
291
301
 
292
302
  ### Voorbeeld 4: Server met Meerdere Clients
@@ -300,10 +310,15 @@ Een TCP server die data ontvangt van meerdere clients en responses terugstuurt.
300
310
 
301
311
  **Function Node code:**
302
312
  ```javascript
303
- // Echo de data terug naar dezelfde client
304
- msg.topic = "send";
305
- msg.payload = "Echo: " + msg.payload;
306
- return msg;
313
+ // Echo de data terug naar dezelfde client (clientId uit ontvangen bericht)
314
+ if (msg.topic === "data") {
315
+ return {
316
+ topic: "send",
317
+ clientId: msg.clientId,
318
+ payload: "Echo: " + msg.payload
319
+ };
320
+ }
321
+ return null;
307
322
  ```
308
323
 
309
324
  ## Troubleshooting
@@ -341,6 +356,13 @@ MIT
341
356
 
342
357
  ## Versie Geschiedenis
343
358
 
359
+ ### Versie 1.1.0
360
+ - Robuuste verbindingscontrole: error handler triggert socket.destroy() voor betrouwbare herverbinding
361
+ - Write-error detectie: bij mislukte verzending wordt herverbinding gestart
362
+ - Snellere herverbinding: standaard 2 sec, minimum 1 sec
363
+ - Geen idle-timeout na verbinden: verbinding blijft open zolang beide partijen verbonden zijn
364
+ - Voorkomen dubbele reconnect en race conditions
365
+
344
366
  ### Versie 1.0.0
345
367
  - Initiele release
346
368
  - TCP Client functionaliteit
@@ -11,7 +11,7 @@
11
11
  clientIpVersion: { value: "4" },
12
12
  clientAutoConnect: { value: true },
13
13
  clientReconnect: { value: true },
14
- clientReconnectInterval: { value: 5, validate: function(v) { return /^\d+$/.test(v) && v >= 0; } },
14
+ clientReconnectInterval: { value: 2, validate: function(v) { return /^\d+$/.test(v) && v >= 1; } },
15
15
  clientMaxReconnectAttempts: { value: 0, validate: function(v) { return /^\d+$/.test(v) && v >= 0; } },
16
16
  clientConnectionTimeout: { value: 10, validate: function(v) { return /^\d+$/.test(v) && v > 0; } },
17
17
  clientInputFormat: { value: "string" },
@@ -118,7 +118,7 @@
118
118
 
119
119
  <div class="form-row">
120
120
  <label for="node-input-clientReconnectInterval"><i class="fa fa-clock-o"></i> Reconnect Interval (sec)</label>
121
- <input type="number" id="node-input-clientReconnectInterval" placeholder="5" min="0">
121
+ <input type="number" id="node-input-clientReconnectInterval" placeholder="2" min="1" title="Minimum 1 seconde voor snelle herverbinding">
122
122
  </div>
123
123
 
124
124
  <div class="form-row">
@@ -118,7 +118,7 @@ module.exports = function(RED) {
118
118
  ipVersion: config.clientIpVersion || "4",
119
119
  autoConnect: config.clientAutoConnect !== false,
120
120
  reconnect: config.clientReconnect !== false,
121
- reconnectInterval: parseInt(config.clientReconnectInterval) || 5,
121
+ reconnectInterval: Math.max(1, parseInt(config.clientReconnectInterval) || 2),
122
122
  maxReconnectAttempts: parseInt(config.clientMaxReconnectAttempts) || 0,
123
123
  connectionTimeout: parseInt(config.clientConnectionTimeout) || 10,
124
124
  inputFormat: config.clientInputFormat || "string",
@@ -187,6 +187,12 @@ module.exports = function(RED) {
187
187
  return;
188
188
  }
189
189
 
190
+ // Timer opruimen zodat een lopende herconnectie niet later de (nieuwe) verbinding verstoort
191
+ if (node.clientReconnectTimer) {
192
+ clearTimeout(node.clientReconnectTimer);
193
+ node.clientReconnectTimer = null;
194
+ }
195
+
190
196
  if (node.clientSocket) {
191
197
  node.clientSocket.destroy();
192
198
  }
@@ -256,7 +262,14 @@ module.exports = function(RED) {
256
262
  });
257
263
 
258
264
  socket.on('close', function(hadError) {
265
+ // Alleen reageren als deze socket nog de actieve client-socket is.
266
+ // Anders is dit een late 'close' van een eerder vervangen socket en negeren we die
267
+ // om valse "verbinding verloren" en herconnectie te voorkomen.
268
+ if (node.clientSocket !== socket) {
269
+ return;
270
+ }
259
271
  node.clientConnected = false;
272
+ node.clientSocket = null;
260
273
  node.status({ fill: "red", shape: "ring", text: "verbinding gesloten" });
261
274
 
262
275
  const msg = {
@@ -267,16 +280,24 @@ module.exports = function(RED) {
267
280
  };
268
281
  node.send(msg);
269
282
 
270
- if (node.clientConfig.reconnect && (node.clientConfig.maxReconnectAttempts === 0 || node.clientReconnectAttempts < node.clientConfig.maxReconnectAttempts)) {
283
+ // Robuuste herverbinding: alleen starten als nog geen timer loopt
284
+ if (!node.clientReconnectTimer && node.clientConfig.reconnect &&
285
+ (node.clientConfig.maxReconnectAttempts === 0 || node.clientReconnectAttempts < node.clientConfig.maxReconnectAttempts)) {
271
286
  node.clientReconnectAttempts++;
287
+ const intervalMs = node.clientConfig.reconnectInterval * 1000;
272
288
  node.clientReconnectTimer = setTimeout(function() {
289
+ node.clientReconnectTimer = null;
273
290
  clientConnect();
274
- }, node.clientConfig.reconnectInterval * 1000);
291
+ }, intervalMs);
275
292
  node.status({ fill: "yellow", shape: "ring", text: `herconnectie in ${node.clientConfig.reconnectInterval}s...` });
276
293
  }
277
294
  });
278
295
 
279
296
  socket.on('error', function(err) {
297
+ // Alleen reageren als deze socket nog de actieve is (voorkom valse status bij oude socket).
298
+ if (node.clientSocket !== socket) {
299
+ return;
300
+ }
280
301
  node.clientConnected = false;
281
302
  node.status({ fill: "red", shape: "ring", text: `fout: ${err.message}` });
282
303
 
@@ -287,10 +308,16 @@ module.exports = function(RED) {
287
308
  error: err.message
288
309
  };
289
310
  node.send(msg);
311
+ // Socket vernietigen zodat 'close' wordt getriggerd en herverbinding start
312
+ try { socket.destroy(); } catch (e) { /* negeer */ }
290
313
  });
291
314
 
292
315
  socket.on('timeout', function() {
293
316
  // Timeout wordt alleen gebruikt tijdens connect, niet tijdens verbonden state
317
+ // Alleen reageren als deze socket nog de actieve is.
318
+ if (node.clientSocket !== socket) {
319
+ return;
320
+ }
294
321
  if (!node.clientConnected) {
295
322
  socket.destroy();
296
323
  node.clientConnected = false;
@@ -330,9 +357,17 @@ module.exports = function(RED) {
330
357
  toSend = Buffer.concat([formatted, delim]);
331
358
  }
332
359
 
333
- node.clientSocket.write(toSend);
360
+ node.clientSocket.write(toSend, function(err) {
361
+ if (err) {
362
+ node.clientConnected = false;
363
+ node.error("Verzenden mislukt: " + err.message);
364
+ try { node.clientSocket.destroy(); } catch (e) { /* negeer */ }
365
+ }
366
+ });
334
367
  } catch (err) {
368
+ node.clientConnected = false;
335
369
  node.error("Fout bij verzenden: " + err.message);
370
+ try { if (node.clientSocket) node.clientSocket.destroy(); } catch (e) { /* negeer */ }
336
371
  }
337
372
  }
338
373
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-tcp-client-server-avd",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Node-RED node voor TCP client en/of server functionaliteit",
5
5
  "keywords": [
6
6
  "node-red",
@@ -14,12 +14,15 @@
14
14
  "tcp-client-server-avd": "nodes/tcp-client-server.js"
15
15
  }
16
16
  },
17
- "author": "",
17
+ "author": "Arie van Dijke",
18
18
  "license": "MIT",
19
19
  "engines": {
20
20
  "node": ">=12.0.0"
21
21
  },
22
22
  "dependencies": {},
23
+ "devDependencies": {
24
+ "tar": "^7.0.0"
25
+ },
23
26
  "repository": {
24
27
  "type": "git",
25
28
  "url": ""
@@ -1,408 +0,0 @@
1
- # Node-RED TCP Client/Server Node (AVD)
2
-
3
- Een flexibele Node-RED node die functioneert als TCP client en/of TCP server, met uitgebreide configuratiemogelijkheden en foutafhandeling.
4
-
5
- ## Installatie
6
-
7
- ### Via Node-RED Manage Palette (aanbevolen voor lokale installatie)
8
-
9
- 1. Open de Node-RED webinterface
10
- 2. Ga naar **Menu** → **Manage palette**
11
- 3. Klik op de **Install** tab
12
- 4. Klik op **install from** of gebruik het upload veld
13
- 5. Geef het volledige pad op naar het `.tgz` bestand:
14
- ```
15
- C:\Users\Arie\Desktop\NodeRedTCP\node-red-contrib-tcp-client-server-avd-1.0.0.tgz
16
- ```
17
- Of upload het bestand direct
18
- 6. Klik op **Install**
19
- 7. Herstart Node-RED (indien nodig)
20
-
21
- ### Via npm (aanbevolen voor gepubliceerde packages)
22
-
23
- ```bash
24
- npm install node-red-contrib-tcp-client-server-avd
25
- ```
26
-
27
- ### Handmatige installatie
28
-
29
- 1. Clone of download dit project
30
- 2. Kopieer de map naar je Node-RED `nodes` directory (meestal `~/.node-red/nodes/`)
31
- 3. Installeer dependencies:
32
- ```bash
33
- cd ~/.node-red/nodes/node-red-contrib-tcp-client-server-avd
34
- npm install
35
- ```
36
- 4. Herstart Node-RED
37
-
38
- ## Functionaliteiten
39
-
40
- ### TCP Client Mode
41
- - Automatisch verbinden bij flow start (optioneel)
42
- - Handmatig verbinden/verbreken via messages
43
- - Automatische herconnectie met configureerbare instellingen
44
- - Ondersteuning voor verschillende dataformaten (String, Buffer, JSON, Hex)
45
- - Message delimiter ondersteuning voor message framing
46
- - Keep-alive optie
47
-
48
- ### TCP Server Mode
49
- - Automatisch starten bij flow start (optioneel)
50
- - Luisteren op geconfigureerde poort
51
- - Meerdere gelijktijdige client verbindingen
52
- - Unieke client identificatie
53
- - Broadcast naar alle clients of verzenden naar specifieke client
54
- - Zelfde dataformaat ondersteuning als client mode
55
-
56
- ### Gecombineerde Mode
57
- - Gebruik zowel client als server functionaliteit in één node
58
- - Onafhankelijke configuratie voor beide modi
59
-
60
- ## Gebruik
61
-
62
- ### Basis Configuratie
63
-
64
- 1. Sleep de node naar je flow
65
- 2. Dubbelklik op de node om te configureren
66
- 3. Selecteer de gewenste mode: TCP Client, TCP Server, of TCP Client & Server
67
- 4. Configureer de instellingen volgens je behoeften
68
-
69
- ### Client Mode - Verbinden
70
-
71
- **Automatisch verbinden:**
72
- - Zet "Auto Verbinden" aan
73
- - De client verbindt automatisch bij flow start
74
-
75
- **Handmatig verbinden:**
76
- - Zet "Auto Verbinden" uit
77
- - Stuur een message met `topic: "connect"` naar de node
78
-
79
- **Verbinden verbreken:**
80
- - Stuur een message met `topic: "disconnect"` naar de node
81
-
82
- ### Server Mode - Server Beheer
83
-
84
- **Automatisch starten:**
85
- - Zet "Auto Start" aan
86
- - De server start automatisch bij flow start
87
-
88
- **Handmatig starten:**
89
- - Zet "Auto Start" uit
90
- - Stuur een message met `topic: "start"` naar de node
91
-
92
- **Server stoppen:**
93
- - Stuur een message met `topic: "stop"` naar de node
94
-
95
- ## Message Formats
96
-
97
- ### Input Messages (naar Node)
98
-
99
- #### Client Mode
100
-
101
- **Verbinden:**
102
- ```javascript
103
- { topic: "connect" }
104
- ```
105
-
106
- **Verbreken:**
107
- ```javascript
108
- { topic: "disconnect" }
109
- ```
110
-
111
- **Data verzenden:**
112
- ```javascript
113
- {
114
- topic: "send",
115
- payload: "data om te verzenden" // string, buffer, of object
116
- }
117
- ```
118
-
119
- Als er geen topic is opgegeven, wordt de payload automatisch verzonden.
120
-
121
- #### Server Mode
122
-
123
- **Server starten:**
124
- ```javascript
125
- { topic: "start" }
126
- ```
127
-
128
- **Server stoppen:**
129
- ```javascript
130
- { topic: "stop" }
131
- ```
132
-
133
- **Data verzenden naar specifieke client:**
134
- ```javascript
135
- {
136
- topic: "send",
137
- clientId: "client-unique-id",
138
- payload: "data om te verzenden"
139
- }
140
- ```
141
-
142
- **Data verzenden naar alle clients (broadcast):**
143
- ```javascript
144
- {
145
- topic: "broadcast",
146
- payload: "data om te verzenden"
147
- }
148
- ```
149
-
150
- ### Output Messages (van Node)
151
-
152
- #### Client Mode
153
-
154
- **Verbindingsstatus:**
155
- ```javascript
156
- {
157
- topic: "status",
158
- payload: "connected" | "disconnected" | "error",
159
- status: "connected" | "disconnected" | "error",
160
- error: "error message (indien van toepassing)"
161
- }
162
- ```
163
-
164
- **Ontvangen data:**
165
- ```javascript
166
- {
167
- topic: "data",
168
- payload: "ontvangen data",
169
- timestamp: "ISO timestamp"
170
- }
171
- ```
172
-
173
- #### Server Mode
174
-
175
- **Server status:**
176
- ```javascript
177
- {
178
- topic: "status",
179
- payload: "listening" | "stopped" | "error",
180
- port: 1234,
181
- error: "error message (indien van toepassing)"
182
- }
183
- ```
184
-
185
- **Client verbinding:**
186
- ```javascript
187
- {
188
- topic: "client/connected",
189
- clientId: "unique-client-id",
190
- remoteAddress: "client-ip",
191
- remotePort: "client-port"
192
- }
193
- ```
194
-
195
- **Client verbreking:**
196
- ```javascript
197
- {
198
- topic: "client/disconnected",
199
- clientId: "unique-client-id"
200
- }
201
- ```
202
-
203
- **Ontvangen data:**
204
- ```javascript
205
- {
206
- topic: "data",
207
- payload: "ontvangen data",
208
- clientId: "unique-client-id",
209
- remoteAddress: "client-ip",
210
- remotePort: "client-port",
211
- timestamp: "ISO timestamp"
212
- }
213
- ```
214
-
215
- ## Configuratie Opties
216
-
217
- ### Client Mode
218
-
219
- - **Host**: Server hostname of IP adres (standaard: "localhost")
220
- - **Port**: Server poort nummer (standaard: 8080)
221
- - **IP Versie**: IPv4 of IPv6 (standaard: IPv4)
222
- - **Auto Verbinden**: Automatisch verbinden bij flow start (standaard: true)
223
- - **Herconnectie**: Automatische herconnectie bij verbroken verbinding (standaard: true)
224
- - **Reconnect Interval**: Tijd tussen reconnect pogingen in seconden (standaard: 5)
225
- - **Max Reconnect Pogingen**: Maximum aantal reconnect pogingen (0 = oneindig, standaard: 0)
226
- - **Connection Timeout**: Timeout voor connectiepogingen in seconden (standaard: 10)
227
- - **Input Format**: Data formaat voor verzenden (String, Buffer, JSON, Hex String)
228
- - **Output Format**: Data formaat voor ontvangen (String, Buffer, JSON, Hex String)
229
- - **Encoding**: Character encoding voor String format (UTF-8, ASCII, Latin1, Base64)
230
- - **Message Delimiter**: Optionele delimiter voor message framing (bijv. `\n` of `\r\n`)
231
- - **Keep-Alive**: TCP keep-alive optie (standaard: false)
232
-
233
- ### Server Mode
234
-
235
- - **Listen Port**: Poort waarop de server luistert (standaard: 8080)
236
- - **Bind Address**: IP adres om aan te binden (standaard: "0.0.0.0" = alle interfaces)
237
- - **IP Versie**: IPv4 of IPv6 (standaard: IPv4)
238
- - **Auto Start**: Automatisch starten bij flow start (standaard: true)
239
- - **Max Connections**: Maximum aantal gelijktijdige verbindingen (0 = onbeperkt, standaard: 0)
240
- - **Connection Timeout**: Timeout voor client verbindingen in seconden (standaard: 600)
241
- - **Input Format**: Data formaat voor verzenden (String, Buffer, JSON, Hex String)
242
- - **Output Format**: Data formaat voor ontvangen (String, Buffer, JSON, Hex String)
243
- - **Encoding**: Character encoding voor String format (UTF-8, ASCII, Latin1, Base64)
244
- - **Message Delimiter**: Optionele delimiter voor message framing (bijv. `\n` of `\r\n`)
245
- - **Keep-Alive**: TCP keep-alive optie (standaard: false)
246
-
247
- ## Status Weergave
248
-
249
- De node toont verschillende status indicatoren:
250
-
251
- ### Client Mode
252
- - **Groen (verbonden)**: Succesvol verbonden met server
253
- - **Rood (fout)**: Verbindingsfout of verbreken
254
- - **Grijs (niet verbonden)**: Niet verbonden
255
- - **Geel (verbinden)**: Verbinding wordt tot stand gebracht
256
-
257
- ### Server Mode
258
- - **Groen (luisterend)**: Server luistert actief op poort
259
- - **Rood (gestopt/fout)**: Server is gestopt of fout opgetreden
260
- - **Blauw (actief)**: Server actief met X verbindingen
261
-
262
- ## Voorbeelden
263
-
264
- ### Voorbeeld 1: Basis TCP Client
265
-
266
- Een eenvoudige TCP client die verbindt met een server en data verzendt/ontvangt.
267
-
268
- **Flow:**
269
- ```
270
- [Inject] → [TCP Client Node] → [Debug]
271
- ```
272
-
273
- **Configuratie:**
274
- - Mode: TCP Client
275
- - Host: localhost
276
- - Port: 8080
277
- - Auto Verbinden: aan
278
-
279
- ### Voorbeeld 2: Basis TCP Server
280
-
281
- Een TCP server die luistert op poort 8080 en data ontvangt van clients.
282
-
283
- **Flow:**
284
- ```
285
- [TCP Server Node] → [Debug]
286
- ```
287
-
288
- **Configuratie:**
289
- - Mode: TCP Server
290
- - Listen Port: 8080
291
- - Auto Start: aan
292
-
293
- ### Voorbeeld 3: Client met Reconnect
294
-
295
- Een TCP client met automatische herconnectie.
296
-
297
- **Configuratie:**
298
- - Mode: TCP Client
299
- - Host: 192.168.1.100
300
- - Port: 8080
301
- - Auto Verbinden: aan
302
- - Herconnectie: aan
303
- - Reconnect Interval: 5 seconden
304
- - Max Reconnect Pogingen: 0 (oneindig)
305
-
306
- ### Voorbeeld 4: Server met Meerdere Clients
307
-
308
- Een TCP server die data ontvangt van meerdere clients en responses terugstuurt.
309
-
310
- **Flow:**
311
- ```
312
- [TCP Server Node] → [Function Node] → [TCP Server Node]
313
- ```
314
-
315
- **Function Node code:**
316
- ```javascript
317
- // Echo de data terug naar dezelfde client
318
- msg.topic = "send";
319
- msg.payload = "Echo: " + msg.payload;
320
- return msg;
321
- ```
322
-
323
- ## Troubleshooting
324
-
325
- ### Client kan niet verbinden
326
-
327
- 1. Controleer of de server draait en bereikbaar is
328
- 2. Controleer firewall instellingen
329
- 3. Controleer host en port configuratie
330
- 4. Bekijk de status van de node voor foutmeldingen
331
-
332
- ### Server kan niet starten
333
-
334
- 1. Controleer of de poort niet al in gebruik is
335
- 2. Controleer of je rechten hebt om op de poort te luisteren (voor poorten < 1024 op Linux/Mac)
336
- 3. Controleer firewall instellingen
337
- 4. Bekijk de status van de node voor foutmeldingen
338
-
339
- ### Data wordt niet correct ontvangen
340
-
341
- 1. Controleer de Output Format configuratie
342
- 2. Controleer de Encoding instelling
343
- 3. Voor message framing, gebruik de Message Delimiter optie
344
- 4. Voor binary data, gebruik Buffer format
345
-
346
- ## Bekende Beperkingen
347
-
348
- - TLS/SSL ondersteuning is nog niet geïmplementeerd (toekomstige versie)
349
- - UDP protocol wordt niet ondersteund (alleen TCP)
350
- - Rate limiting is nog niet beschikbaar
351
-
352
- ## Licentie
353
-
354
- MIT
355
-
356
- ## Versie Geschiedenis
357
-
358
- ### Versie 1.0.0
359
- - Initiele release
360
- - TCP Client functionaliteit
361
- - TCP Server functionaliteit
362
- - Gecombineerde mode
363
- - String, Buffer, JSON, en Hex data formaten
364
- - Automatische herconnectie
365
- - Message delimiter ondersteuning
366
- - IPv4 en IPv6 ondersteuning
367
- - Keep-alive optie
368
- - Meerdere client verbindingen (server mode)
369
- - Package structuur geoptimaliseerd:
370
- - Bestandsnamen: `tcp-client-server-avd.js/html`
371
- - package.json bijgewerkt met `main` en `files` velden
372
- - Node configuratie vereenvoudigd (automatische HTML detectie)
373
- - Distributie via `npm pack` voor correcte package structuur
374
- - Installatie via Node-RED Manage Palette ondersteund
375
-
376
- ## Package Details
377
-
378
- ### Package Structuur
379
- ```
380
- node-red-contrib-tcp-client-server-avd/
381
- ├── package.json
382
- ├── README.md
383
- ├── SPECIFICATIE.md
384
- └── nodes/
385
- ├── tcp-client-server-avd.js
386
- └── tcp-client-server-avd.html
387
- ```
388
-
389
- ### Node Type
390
- - **Node type naam**: `tcp-client-server-avd`
391
- - **Package naam**: `node-red-contrib-tcp-client-server-avd`
392
- - **Versie**: 1.0.0
393
-
394
- ### Distributie
395
- Het package wordt gedistribueerd als `.tgz` bestand dat kan worden geïnstalleerd via:
396
- - Node-RED Manage Palette (upload of pad)
397
- - npm (na publicatie)
398
- - Handmatige installatie
399
-
400
- Om een nieuw distributie-bestand te maken:
401
- ```bash
402
- cd NodeRedTCP
403
- npm pack
404
- ```
405
-
406
- ## Ondersteuning
407
-
408
- Voor vragen, problemen of suggesties, open een issue op de GitHub repository.