Skip to content

Instantly share code, notes, and snippets.

@tedmiston
Last active February 19, 2024 21:55
Show Gist options
  • Save tedmiston/5935757 to your computer and use it in GitHub Desktop.
Save tedmiston/5935757 to your computer and use it in GitHub Desktop.
Node.js TCP client and server example
/*
In the node.js intro tutorial (http://nodejs.org/), they show a basic tcp
server, but for some reason omit a client connecting to it. I added an
example at the bottom.
Save the following server in example.js:
*/
var net = require('net');
var server = net.createServer(function(socket) {
socket.write('Echo server\r\n');
socket.pipe(socket);
});
server.listen(1337, '127.0.0.1');
/*
And connect with a tcp client from the command line using netcat, the *nix
utility for reading and writing across tcp/udp network connections. I've only
used it for debugging myself.
$ netcat 127.0.0.1 1337
You should see:
> Echo server
*/
/* Or use this example tcp client written in node.js. (Originated with
example code from
http://www.hacksparrow.com/tcp-socket-programming-in-node-js.html.) */
var net = require('net');
var client = new net.Socket();
client.connect(1337, '127.0.0.1', function() {
console.log('Connected');
client.write('Hello, server! Love, Client.');
});
client.on('data', function(data) {
console.log('Received: ' + data);
client.destroy(); // kill client after server's response
});
client.on('close', function() {
console.log('Connection closed');
});
@whhb
Copy link

whhb commented Feb 18, 2019

This is really fun, I have been playing with this today and you have definitely distracted me. Ignore my previous issue, I have progressed and now have a basic “chat room” with multiple clients.. I have been using ncat as the client, but I need more logic so I’m trying to implement your node client. So far it works, connects to the server and writes the initial text..

But all subsequent message don’t seem to go back to the server?

Apart from the very first client.write how do I send a mother client.write after the user hits enter?

@adrwh
Copy link

adrwh commented Feb 18, 2019

This is really fun, I have been playing with this today and you have definitely distracted me. Ignore my previous issue, I have progressed and now have a basic “chat room” with multiple clients.. I have been using ncat as the client, but I need more logic so I’m trying to implement your node client. So far it works, connects to the server and writes the initial text..

But all subsequent message don’t seem to go back to the server?

Apart from the very first client.write how do I send a mother client.write after the user hits enter?

@rajnisheu
Copy link

newbies who visit this many years later may find this video on youtube helpful to get started with the server side https://www.youtube.com/watch?v=HyGtI17qAjM

@YodaEmbedding
Copy link

YodaEmbedding commented Nov 29, 2019

Is Hello, server! Love, Client. guaranteed to print? It seems like there's a race condition.

Actually, is anything other than E guaranteed to print?

@masvarn
Copy link

masvarn commented Feb 19, 2020

Hi, is it possible to use this to connect to a network share (smb1)?

Copy link

ghost commented Sep 29, 2020

The output:

Connected
Received: Echo server
Hello, server! Love, Client.
Connection closed

all is fine

@hamid814
Copy link

this gist was really helpful for me, thank you dude

@henrydcs
Copy link

Hi guys and gals,
I'm trying to create a simulator using Javascript for the front end which I can do, but I'm having a hard time with Node.js for the backend. When I click on, say, a Cisco router icon, I want the a physical connection to occur between my PC and the physcial router that is connected via ethernet. It is a laboratory router (no internet connection). I was thinking that I should download the NPM package telnet-client and require it in the node.js file. I don't know what to do from there. I assume I have to require net as well. Will someone help me. Please... Pretty please :)

@terthesz
Copy link

terthesz commented Apr 5, 2021

Please use arrow functions!

Copy link

ghost commented Jul 15, 2021

hello, how can you prevent DDOS attacks on this code?

@ABHINAVABHISHEK
Copy link

how to set tcp headers on request and receive in the server

@zakcodez
Copy link

how to set tcp headers on request and receive in the server

I don't think you can set headers with TCP. HTTP maybe what you are looking for

@Raghupathy-max
Copy link

'Received: ' + data

I also have a same issue.......

@lenn-mark
Copy link

require("net") is not working in 16.13.1
when i move to 18.x now it says digital envelope routines unsupported
.......

@seyyednaquib
Copy link

you try to connect to another pc port? if yes, make sure to allow inbound firewall

@k-zehnder
Copy link

this gist was really helpful for me, thank you dude

same! thank you!

@manniecobham
Copy link

I have multiple simultaneous connections. how can I write to a particular client if the remotePort and remoteAddress is stored to the DB. the new Socket() command does not work in my case because it creates a new instance of this.

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