Node.js Remote UDP server does not receive messages - node.js

I have a basic problem with a UDP server in Node.js, I've used this little example:
// Remote server
var PORT = 3030;
var HOST = '127.0.0.1'
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log('Message received')
})
server.bind(PORT, HOST);
When I try to send a message from my computer, the server does not respond:
$ echo "test" | nc -u <server_ip> 3030
but, when I try to send the message from the server itself, the message arrives.
$ Message received
The server has static ip and I don't think it's a problem with the ports. Any idea? Thanks.

In the past I've work with the unix type for this kind of socket. It may work with unix_dgram as follow
var server = dgram.createSocket('unix_dgram');

Your server is only listening on localhost. You need to change your HOST variable to something else to be able to listen for messages from the outside world (e.g. 0.0.0.0 for all addresses, or a specific IP like 192.168.1.101).
EDIT: I'm assuming that there is no router in between.

Related

How to recive data from a Flightcell DZMX via Iridium SBD

I have a Flightcell DZMX configured to send data to a ip and port via iridium SBD, where i have a server with a simple code running that recive any request and display on the screen:
var net = require('net');
var server = net.createServer(function(socket) {
socket.on('data', function(data) {
console.log(data.toString());
})
});
server.listen(8080, 'my-server-ip-adress');
console.log('Server listening on port 8080');
But no message is recived from the DZMX. Is iridium SBD not in TCP protocol or is my DZMX misconfigured?
It is inded TCP/IP.
You need to configure your equipament IMEI, IP and port in: https://spnetpro.iridium.com
Everything working fine now.

Node JS: UDP Client does not work in OSX (11.2.2)

I have a windows machine running a udp-server and I try to create a UDP->WebSocket Bridge using node-js...
But I just came as far as connection to the server which seems to run nice on windows but fails on osx.
Using this code:
var PORT = 8005;
var HOST = '192.168.1.33';
var dgram = require('dgram');
var message = new Buffer.from('CONNECTED');
var client = dgram.createSocket('udp4');
client.on('listening', function () {
var address = client.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
client.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
});
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT);
});
Windows outputs nice:
UDP Server listening on 0.0.0.0:65054
UDP message sent to 192.168.36.1:8005
192.168.36.33:8005 - OK
OSX Just:
UDP Server listening on 0.0.0.0:50360
UDP message sent to 192.168.36.1:8005
The Windows server reports a socket error which normaly means there is a network-issue.
I wonder where the problem is, looks like OSX blocks the udp-connection for some reason but I have no firewall or other filter activated or installed on my mac.
Any idea?
Seems the problem is solved, when I disable Wifi and just use my ethernet connection. Seems to be an issue when two network interface are available. Maybe it sends out on device1 but listens on device2...

Unable to receive IPv6 UDP multicast message with Node.js

I have setup two PC in the local network. One is Linux PC where i am running a Script, sending Heart beat message every 1s over UDP as IPv6 multicast message (FF02::1). In the other windows PC, I am running the below node.js code to receive the Heart beat message. I can see the messages in the Wireshark log, but i cant read the message from my code.
var HOST = '::';
var port = 50010;
var dgram = require('dgram');
var message = new Buffer('(data)');
var client = dgram.createSocket('udp6');
// client.bind(port,HOST);
// client.setMulticastLoopback(true);nod3
client.on("error",function(err){
console.log("server error:\n"+err.stack);
})
client.on("message",function(msg,rinfo){
console.log("Received Message:",msg+"from"+rinfo.address+":"+rinfo.port);
console.log("Node address:"+ rinfo.address);
console.log("Node port:"+rinfo.port);
})
client.bind('50010', '::', () => {
client.addMembership('ff02::1', '::%17');
});
client.on("listening",function(){
var address = client.address();
console.log("server listioning"+":"+address.address+":"+address.port)
});

Net Socket Connections in OpenShift

I am trying to create a net socket Nodejs server for my embedded device to send data to on OpenShift.
I am trying to create this simple echo service
var net = require('net');
var HOST = process.env.OPENSHIFT_NODEJS_IP;
var PORT = process.env.OPENSHIFT_NODEJS_PORT || 3000;
console.log('IP:' + HOST + ' Port:' + PORT);
var server = net.createServer(function(connection) {
console.log('client connected');
connection.on('end', function() {console.log('client disconnected');});
connection.write('Hello World!\r\n');
connection.pipe(connection);
});
server.listen(PORT, HOST , function() {
console.log('server is listening');
});
I according to OpenShift's Port Binding Guide I had my client application connect to Port 8000.
For Testing I am using the following code from my desktop machine.
var net = require('net');
var HOST = 'nodejs-myapplication.rhcloud.com';
var PORT = 8000;
var client = net.connect(PORT, HOST, function() {
console.log('connected to server!');
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
});
client.on('end', function() {
console.log('disconnected from server');
});
The Client Scripts gets to Connected to server and gets stuck there itself. Nothing takes place after that.
Now if I open the address nodejs-myapplication.rhcloud.com:8000 in my browser, the NodeJS Server logs a client connected and disconnected, but when the NodeClient is connected the server doesn't show any update. The Node Client just says connected and stays there without doing anything.
If I run the same scripts locally it works fine, ( Locally i use HOst as 127.0.0.1 and port as 3000).
How can I get a TCP Application to connect to the Openshift NodeJS Server?
The Device will be sending ASCII output over the socket eg. $VAR,12,23,21\r\n
I need to be able to read that data, convert it to JSON and send it out to another server.
It has to be loaded on a platform like DigitalOcean with a firewall enabled.
OpenShift doesn't allow custom ports by default so need a workaround for that.

Node.js - "Rebind" UDP socket server to a new port

Which is the most efficient way to change a UDP server's listening port on runtime on Node.js?
I have a default port 41234 for my web app but I want the end-user to be able to change this through a settings textbox, which would call the updatePort().
Using the following code the new (neither the old) port isn't actually listening for datagrams, as I cant receive anything.
var SRV_PORT = 41234;
var server = dgram.createSocket("udp4");
server.on("error", function (err) {
print("server error:\n" + err.stack);
server.close();
});
server.on("message", function (msg, rinfo) {
//code for incoming datagram analysis here
});
server.on("listening", function () {
var address = server.address();
print("server listening " + address.address + ":" + address.port);
});
//start the UDP server with the default SRV_PORT
server.bind(SRV_PORT);
function updatePort(newPort) {
server.close();
server = dgram.createSocket("udp4");
server.bind(newPort);
}
The reason you wouldn't get any messages after updating the port is because you've assigned a new socket instance to server and do not have any event handlers attached anymore.

Resources