Код сервера на Node JS доступен в следующем листинге. const net = require('net'); const connection = socket => { console.dir({ localAddress: socket.localAddress, localPort: socket.localPort, remoteAddress: socket.remoteAddress, remoteFamily: socket.remoteFamily, remotePort: socket.remotePort, bufferSize: socket.bufferSize }); }; const onData = (data,args) => { console.log('date:' + data); }; var sockets = [];//В этот массив будем сохранять всех подключившихся клиентов и удалять при отключении или возникновении ошибки //const iconv = require('iconv-lite');//NPM пакет для работы с кодировками, в данном случаи его использование не потребуется function deleteFromSocketAr(socket) {//Функция для удаления клиентов из массива с сокетами for (var key in sockets) { if ((socket.remoteAddress == sockets[key].remoteAddress) && (socket.remotePort == sockets[key].remotePort)) { console.log(key+'-'+socket.remoteAddress+'-'+sockets[key].remoteAddress+'-'+socket.remotePort+'-'+sockets[key].remotePort); // delete socket[key]; sockets.splice(key,1);//удаляем 1 элемент массива от позиции с ключем key //console.log('Удалён сокет: '+key); } } return true; } function userDisconected(socket) {//Функция для отправки сообщения всем подключенным клиентам при отключении одного из пользователей for (var key in sockets) { if (!((socket.remoteAddress == sockets[key].remoteAddress) && (socket.remotePort == sockets[key].remotePort))) { sockets[key].write('User disconected: '+socket.remoteAddress+':'+socket.remotePort); } } } const server = net.createServer(socket => { socket.setEncoding('binary');//Указываем что работаем с бинарными данными, иначе работа будет идти как UTF-8 for (var key in sockets) { sockets[key].write('New user connected: '+socket.remoteAddress+':'+socket.remotePort); } sockets.push(socket); console.log('колличество:'+sockets.length); console.dir(socket.address()); socket.setNoDelay(true); socket.write('Server: You connected'); socket.on('data', (data,args)=>{ console.log('date:' + data); for (var key in sockets) { sockets[key].write(socket.remoteAddress+':'+socket.remotePort+': '+data,'binary');//Вторым параметром указываем что данные требуется отправить бинарно, если второй параметр не указать то по умолчанию считается как UTF-8, а поскольку Delphi передал нам данные в кодировке cp1251 строка будет перекодирована и у клиентов на Delphi которым буедт отправлено сообщение отобразятся иероглифы//iconv.encode(iconv.decode(data, "cp1251"), "utf8").toString() } });// socket.on('error', err => { console.log('Socket error:', err); deleteFromSocketAr(socket); userDisconected(socket); }); socket.on('end', () => { console.log('Socket end ('+socket.remoteAddress+').'); deleteFromSocketAr(socket); userDisconected(socket); }); socket.on('drain', () => { console.log('Drain.'); }); }).listen(2004); server.on('connection',connection); server.on('error', err => { console.log('Server error:', err); });