-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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