четверг, 27 июня 2019 г.

Node.js - Net server and client

net-is-ip.js

var net = require('net');

console.log('Это IP-адрес ? ' + (net.isIP('1234') === 0 ? false : true));
console.log('Это IP-адрес в формате IPv4 ? ' + (net.isIP('1234') === 4));
console.log('Это IP-адрес в формате IPv6 ? ' + (net.isIP('1234') === 6));

console.log('Это IP-адрес IPv4 ? ' + net.isIPv4('127.0.0.1'));
console.log('Это IP-адрес IPv6 ? ' + net.isIPv6('2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d'));


net-server.js

var net = require('net');

var optionalOptions = {
    allowHalfOpen: false,
    pauseOnConnect: false
};

var server = new net.Server(optionalOptions); // синоним net.createServer();

server.on('connection', function (socket) {
    console.log('Клиет подключился.');

    console.log('Адрес сервера: ' + socket.localAddress + ':' + socket.localPort);
    console.log('Адрес клиента: ' + socket.remoteAddress + ':' + socket.remotePort + ', family: ' + socket.remoteFamily);

    server.getConnections(function (error, count) {console.log('Число подключенных к серверу клиентов: ' + count);});

    var request;
    var response;
    request = response = socket;

    request.setEncoding('utf8');
    request.on('data', function (data) {console.log('Данные от клиента: ' + (Buffer.isBuffer(data) ? data.toString() : data));});
    request.on('end', function () {console.log('Клиент передал серверу все данные.');});

    // response.setNoDelay(); // Установить отправку данных сразу после каждого вызова метода write().
    response.write('Привет клиенту от сервера.');
    response.end('Пока клиенту от сервера.');

    server.close(); // Закрыть сервер и завершить все соединения с клиентами.
});

server.on('close', function () {
    console.log('Сервер закрылся. Все соединения с клиентами завершились.');
});

server.on('error', function (error) {
    console.log('Произошла ошибка на сервере.');
    if (error.code === 'EADDRINUSE') {
        console.log('Адрес сервера "127.0.0.1:8080" всё ещё использует другой сервер. Попробуем создать наш сервер ещё раз через секунду');
        setTimeout(function () {
            server.close();
            server.listen(8080, '127.0.0.1');
        }, 1000);
    } else {
        server.close(); // Закрыть сервер и завершить все соединения с клиентами.
        throw error;
    }
});

server.on('listening', function () {
    console.log('Сервер начал прослушивать подключения от клиентов после вызова метода server.listen().');
    console.log('Адрес сервера: ' + server.address().address + ':' + server.address().port + ', family: ' + server.address().family);
});

server.listen(8080, '127.0.0.1');

if (server.listening) {
    console.log('Сервер в данный момент прослушивает подключения от клиентов.');
} else {
    console.log('Сервер в данный момент не прослушивает подключения от клиентов.');
}

/*
server.ref(); // Удерживать программу от завершения, если в ней остался работать только этот сервер.
server.unref(); // Убрать удержание программы от завершения, если в ней остался работать только этот сервер.
*/


net-client.js

var net = require('net');

var optionalOptions = {
    allowHalfOpen: false,
    pauseOnConnect: false,
    readable: false,
    writrable: false
};

var client = new net.Socket(optionalOptions); // синоним net.createConnection(optionalOptions);

client.setEncoding('utf8');
client.on('data', function (data) {console.log('Данные от сервера: ' + (Buffer.isBuffer(data) ? data.toString() : data));});
client.on('end', function () {console.log('Сервер передал клиенту все данные.');});

client.on('drain', function () {
    console.log('Буфер записи пуст.');
});

client.setTimeout(1000);
client.on('timeout', function () {
    console.log('Превышено время ожидания ответа от севера.');
});

client.on('close', function (hadError) {
    console.log('Клиент закрыл свое соединение с сервером.');
    if (hadError) {
        console.log('Произошла ошибка во временя передачи данных.');
    }
});

client.on('error', function (error) {
    console.log('Произошла ошибка соедиения с сервером. Клиент сейчас автоматически выполнит метод client.close().');
});

client.on('ready', function () {
    console.log('Был вызван метод client.connect(). Клиент готов к использованию.');
});

client.on('lookup', function (error, address, family, host) {
    console.log('Поиск адреса подключения до создания соединения с сервером.');
    console.log(address);
    console.log(family);
    console.log(host);
});

if (client.pending) {
    console.log('Клиент ожидает вызова метод client.connect() и подключения к серверу.');
}

client.on('connect', function () {
    console.log('Соединение с сервером установлено.');
});

// client.connect(8080, '127.0.0.1');
client.connect({
    port: 8080, host: '127.0.0.1', // Адрес сервера
    localPort: 9090, localAddress: '127.0.0.2', family: 4 // Локальный адрес клиента для передачи его серверу. IPv4.
});

if (client.connecting) {
    console.log('В данный момент клиент устанавливает соединение с сервером.');
}

client.write('Привет серверу от клиента.');
client.end('Пока серверу от клиента.');

/*
client.destroy();
if (client.destroyed) {
    console.log('Соединение с сервером уничтожено. Данные больше не могут быть отправлены.');
}

client.ref(); // Удерживать программу от завершения, если в ней остался работать только этот клиент.
client.unref(); // Убрать удержание программы от завершения, если в ней остался работать только этот клиент.
*/

Комментариев нет:

Отправить комментарий