Skip to content

Instantly share code, notes, and snippets.

@sid24rane
Created July 25, 2016 08:39
Show Gist options
  • Save sid24rane/6e6698e93360f2694e310dd347a2e2eb to your computer and use it in GitHub Desktop.
Save sid24rane/6e6698e93360f2694e310dd347a2e2eb to your computer and use it in GitHub Desktop.
Simple UDP Client and Server in Node.js ==> ( Echo Server )
var udp = require('dgram');
// --------------------creating a udp server --------------------
// creating a udp server
var server = udp.createSocket('udp4');
// emits when any error occurs
server.on('error',function(error){
console.log('Error: ' + error);
server.close();
});
// emits on new datagram msg
server.on('message',function(msg,info){
console.log('Data received from client : ' + msg.toString());
console.log('Received %d bytes from %s:%d\n',msg.length, info.address, info.port);
//sending msg
server.send(msg,info.port,'localhost',function(error){
if(error){
client.close();
}else{
console.log('Data sent !!!');
}
});
});
//emits when socket is ready and listening for datagram msgs
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(2222);
setTimeout(function(){
server.close();
},8000);
// -------------------- udp client ----------------
var buffer = require('buffer');
// creating a client socket
var client = udp.createSocket('udp4');
//buffer msg
var data = Buffer.from('siddheshrane');
client.on('message',function(msg,info){
console.log('Data received from server : ' + msg.toString());
console.log('Received %d bytes from %s:%d\n',msg.length, info.address, info.port);
});
//sending msg
client.send(data,2222,'localhost',function(error){
if(error){
client.close();
}else{
console.log('Data sent !!!');
}
});
var data1 = Buffer.from('hello');
var data2 = Buffer.from('world');
//sending multiple msg
client.send([data1,data2],2222,'localhost',function(error){
if(error){
client.close();
}else{
console.log('Data sent !!!');
}
});
@rodrigoms2004
Copy link

Hi,
I made some changes and I am using it to test TCP and UDP connections for some IoT solutions.

https://github.com/rodrigoms2004/ServerSocketTCP_UDP

@CoolMan119
Copy link

I love your Gist and it really helped me create my program. I have a quick question though, for the client what does the Buffer.from('siddheshrane") do (line 61), and is it required for the client? Thank You!

@DevJMD
Copy link

DevJMD commented May 10, 2020

I love your Gist and it really helped me create my program. I have a quick question though, for the client what does the Buffer.from('siddheshrane") do (line 61), and is it required for the client? Thank You!

It's not required, he's simply creating a Buffer from his GitHub username and then sending that data on line 69. You can send whatever you want. :-)

@jadsongmatos
Copy link

has anyone worked with cluster?

const cluster = require('cluster');
const dgram = require('dgram');
if (cluster.isMaster) {
  cluster.fork(); // Works ok.
  cluster.fork(); // Fails with EADDRINUSE.
} else {
  const s = dgram.createSocket('udp4');
  s.bind(1234, () => {
    s.addMembership('224.0.0.114');
  });
}

@jecsham
Copy link

jecsham commented May 16, 2021

Very helpful!

@Park-Developer
Copy link

Thank you!!

@apdevelop
Copy link

Declaring the buffer variable, which is not used or it really should be in Pascal case?
var buffer = require('buffer');

While the Buffer class is available within the global scope, it is still recommended to explicitly reference it via an import or require statement.

@liyamin
Copy link

liyamin commented Sep 21, 2022

I want to get my home PC's public IP(behind NAT) by modified these codes a little:
On the server side, print client's IP in the "onMessage()", and on the client side, send UDP datagram by nc command (echo -n 'x' | nc -4uw0 $server $port).
It works fine from my notebook, but not work from the home PC.
I run tcpdump on the server, it can captured all datagrams, but the datagrams from home PC can't reach "onMessage()", why?

onmessageproblem

To simplify the case, I run nc on the server side, found out that the first message from home PC alway lost in server's stdout.
lost first dg

However, nc works fine from the notebook.
nc ok

The server and home PC' OS is ubuntu 22.04. The notebook is Mac OS.
Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment