typescriptadvanced
TCP Server and Client with Net Module
Build TCP server and client pairs using Node.js net module with connection pooling and message framing.
typescriptPress ⌘/Ctrl + Shift + C to copy
import net from 'net';
// Message framing: length-prefixed protocol
function encodeMessage(data: string): Buffer {
const body = Buffer.from(data, 'utf8');
const header = Buffer.alloc(4);
header.writeUInt32BE(body.length, 0);
return Buffer.concat([header, body]);
}
function createParser(onMessage: (msg: string) => void) {
let buffer = Buffer.alloc(0);
return (chunk: Buffer) => {
buffer = Buffer.concat([buffer, chunk]);
while (buffer.length >= 4) {
const len = buffer.readUInt32BE(0);
if (buffer.length < 4 + len) break;
const msg = buffer.subarray(4, 4 + len).toString('utf8');
buffer = buffer.subarray(4 + len);
onMessage(msg);
}
};
}
// TCP Server
const server = net.createServer((socket) => {
const addr = `${socket.remoteAddress}:${socket.remotePort}`;
console.log(`Client connected: ${addr}`);
const parse = createParser((msg) => {
console.log(`[${addr}] ${msg}`);
const response = JSON.stringify({ echo: msg, timestamp: Date.now() });
socket.write(encodeMessage(response));
});
socket.on('data', parse);
socket.on('end', () => console.log(`Client disconnected: ${addr}`));
socket.on('error', (err) => console.error(`Socket error: ${err.message}`));
});
server.listen(9000, () => console.log('TCP server on port 9000'));
// TCP Client
function createClient(port: number, host = 'localhost') {
const socket = net.createConnection({ port, host });
const parse = createParser((msg) => {
console.log(`Response: ${msg}`);
});
socket.on('connect', () => {
console.log('Connected to server');
socket.write(encodeMessage('Hello, TCP server!'));
socket.write(encodeMessage(JSON.stringify({ action: 'ping' })));
});
socket.on('data', parse);
socket.on('end', () => console.log('Disconnected'));
return socket;
}
// Uncomment to test as client:
// createClient(9000);Use Cases
- Custom protocol implementation
- Inter-process communication
- IoT device communication
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
typescriptbeginner
DNS Lookup and Resolution
Perform DNS lookups, resolve hostnames to IP addresses, and query DNS records using Node.js dns module.
Best for: Network diagnostics tools
#nodejs#dns
typescriptadvanced
Node.js Worker Threads for Parallel Processing
Use Worker Threads to run CPU-intensive tasks in parallel without blocking the event loop.
Best for: CPU-intensive data processing without blocking
#nodejs#worker-threads
typescriptintermediate
Node.js Stream Pipeline with Transform
Build efficient data processing pipelines using Node.js streams for large file handling.
Best for: Processing large CSV files without loading into memory
#nodejs#streams
typescriptintermediate
TypeScript Typed Event Emitter
Create type-safe event emitters in Node.js with full TypeScript support and autocomplete.
Best for: Type-safe pub/sub communication between modules
#nodejs#events