Skip to content

Instantly share code, notes, and snippets.

@avtehnik
Created October 23, 2019 23:52
Show Gist options
  • Save avtehnik/9bb579847071bd36cf95bd80ef1d2018 to your computer and use it in GitHub Desktop.
Save avtehnik/9bb579847071bd36cf95bd80ef1d2018 to your computer and use it in GitHub Desktop.
node udp echo server
{
"name": "service-discovery",
"version": "1.0.0",
"description": "",
"main": "udp-server.js",
"dependencies": {
"broadcast-address": "^1.0.2",
"dgram": "^1.0.1",
"dotenv": "^8.2.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"install-service": "cp discovery-server.service /etc/systemd/system/discovery-server.service"
},
"author": "",
"license": "ISC"
}
//npm install broadcast-address
//npm install dgram
//npm install dotenv
var udp = require('dgram');
var buffer = require('buffer');
const os = require('os');
const broadcastAddress = require('broadcast-address');
var serverPort = process.env.UDP_ECHO_SERVER_PORT || 3192;
var client = udp.createSocket('udp4');
var data = Buffer.from('siddheshrane');
client.on('message', function(msg, info) {
console.log('Got response from %s:%d', info.address, info.port);
console.log('Pi ip address is %s', info.address);
console.log('');
});
client.bind(2221, undefined, function() {
client.setBroadcast(true);
});
var interfaces = os.networkInterfaces();
var interfacesNames = Object.keys(interfaces);
interfacesNames.forEach(function(interfacesName) {
var interfaceItem = interfaces[interfacesName];
interfaceItem.forEach(function(interfaceAddress) {
if (interfaceAddress.family === 'IPv4') {
client.send(data, serverPort, broadcastAddress(interfacesName), function(error) {
if (error) {
client.close();
} else {
console.log('Send request from ' + interfacesName + ' ' + interfaceAddress.address);
}
})
}
})
});
//npm install dgram
//npm install dotenv
const dotenv = require('dotenv');
dotenv.config();
var port = process.env.UDP_ECHO_SERVER_PORT || 3192;
var udp = require('dgram');
var server = udp.createSocket('udp4');
server.on('error', function(error) {
console.log('Error: ' + error);
server.close();
});
server.on('message', function(msg, info) {
console.log('Got message from %s:%d',info.address, info.port);
server.send(msg, info.port, info.address, function(error) {
if (error) {
client.close();
}
});
});
server.on('listening', function() {
var address = server.address();
var port = address.port;
var family = address.family;
var ipaddr = address.address;
console.log('Server is listening at port' + port);
console.log('Server ip :' + ipaddr);
console.log('Server is IP4/IP6 : ' + family);
});
//emits after the socket is closed using socket.close();
server.on('close', function() {
console.log('Socket is closed !');
});
server.bind(port);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment