Skip to content

Instantly share code, notes, and snippets.

@zakcodez
Forked from sid24rane/net.js
Last active December 9, 2021 11:23
Show Gist options
  • Save zakcodez/1eace8110caa7a2b4f8ae001253286cb to your computer and use it in GitHub Desktop.
Save zakcodez/1eace8110caa7a2b4f8ae001253286cb to your computer and use it in GitHub Desktop.
Simple TCP Client and Server in Node.js (Covering all useful Properties & Methods)
const net = require("net");
// creating a custom socket client and connecting it....
const client = new net.Socket();
client.connect({
port: 2222
});
client.on("connect", () => {
console.log("Client: connection established with server");
const address = client.address();
const port = address.port;
const family = address.family;
const ipaddr = address.address;
console.log("Client is listening at port" + port);
console.log("Client ip :" + ipaddr);
console.log("Client is IP4/IP6 : " + family);
// writing data to server
client.write("Hello from client");
});
client.setEncoding("utf8");
client.on("data", function (data) {
console.log("Data from server:" + data);
});
const net = require("net");
// Create the TCP server
const server = net.createServer();
// Emitted when the server closes,
// but not emitted until all connections closes.
server.on("close", () => {
console.log("Server closed");
});
// Emitted when new client connects
server.on("connection", (socket) => {
// this property shows the number of characters
// currently buffered to be written.
// Users who experience large or growing bufferSize
// should attempt to "throttle" the data flows
// in their program with pause() and resume().
// bufferSize deprecated, use writableLength
console.log(`Buffer size: ${socket.writableLength}`);
console.log(`Remote socket ip: ${socket.remoteAddress}`);
server.getConnections((error, connections) => {
console.log(`Currently ${connections} connections`);
});
socket.setEncoding("utf-8");
socket.setTimeout(800000, () => {
console.log("Socket timed out");
});
socket.on("data", (data) => {
const bread = socket.bytesRead;
const bwrite = socket.bytesWritten;
console.log("Bytes read : " + bread);
console.log("Bytes written : " + bwrite);
console.log("Data sent to server : " + data);
//echo data
const is_kernel_buffer_full = socket.write("Data ::" + data);
if (is_kernel_buffer_full) {
console.log("Data was flushed successfully from kernel buffer i.e written successfully!");
} else {
socket.pause();
}
});
socket.on("drain", () => {
console.log("write buffer is empty now .. u can resume the writable stream");
socket.resume();
});
socket.on("error", (error) => {
console.log("Error : " + error);
});
socket.on("timeout", () => {
console.log("Socket timed out !");
socket.end("Timed out!");
// can call socket.destroy() here too.
});
socket.on("end", (data) => {
console.log("Socket ended from other end!");
console.log("End data : " + data);
});
socket.on("close", (error) => {
const bread = socket.bytesRead;
const bwrite = socket.bytesWritten;
console.log("Bytes read : " + bread);
console.log("Bytes written : " + bwrite);
console.log("Socket closed!");
if (error) {
console.log("Socket was closed coz of transmission error");
}
});
setTimeout(() => {
const isdestroyed = socket.destroyed;
console.log("Socket destroyed:" + isdestroyed);
socket.destroy();
}, 1200000);
});
// Emits when any error occurs
server.on("error", (error) => {
console.log(`Error: ${error.name}`);
console.log(error.message);
});
server.on("listening", () => {
const address = server.address();
typeof address === "string"
? console.log(`TCP server listening at ${address}`)
: console.log(`TCP server listening at ${address.address}`);
});
server.listen({
port: 1227,
host: "0.0.0.0",
backlog: 300
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment