Node.js で単純な TCP サーバーと単純な TCP クライアントを作成しました
これで、クライアントがサーバーに「exit」を送信すると、接続が正常に閉じられます。サーバーはソケット リストからソケットを削除し、「Bye bye!」を送信します。クライアントに。
クライアントの接続も閉じられますが、アプリはまだ他の入力を待っているため、停止せず、CTRL + C を入力する必要があります。
接続が閉じた後に追加しようとしましprocess.exit()
たが、機能しません:
クライアントコード:
var net = require('net'),
config = require(__dirname + '/config.json'),
connection = net.createConnection(config.port, config.host);
connection.setEncoding('utf8');
connection.on('connect', function () {
console.log('Connected');
});
connection.on('error', function (err) {
console.error(err);
});
connection.on('data', function (data) {
console.log('» ' + data);
});
connection.on('close', function() {
console.log('Connection closed');
});
process.stdin.on('data', function (data) {
if ((new String(data)).toLowerCase() === 'exit') {
connection.end();
process.exit();
}
else {
connection.write(data);
}
});
process.stdin.resume();
サーバーコード:
var server = require('net').createServer(),
config = require(__dirname + '/config.json'),
sockets = [];
server.on('connection', function (socket) {
socket.setEncoding('UTF-8');
socket.on('data', function (data) {
console.log('Received data: ' + data);
if (data.trim().toLowerCase() === 'exit') {
socket.write("Bye bye!\n");
socket.end();
}
else {
sockets.forEach(function (client) {
if (client && client != socket) {
client.write(data);
}
});
}
});
socket.on('close', function () {
console.log('Connection closed');
sockets.splice(sockets.indexOf(socket), 1);
console.info('Sockets connected: ' + sockets.length);
});
sockets.push(socket);
});
server.on('listening', function () {
console.log('Server listening');
});
server.on('close', function () {
console.log('Server is now closed');
});
server.on('error', function (err) {
console.log('error:', err);
});
server.listen(config.port);
編集:
クライアント接続の「クローズ時」イベント ハンドラを追加しました。そのため、文字列「接続が閉じられました」がサーバーとクライアントによって出力されるようになりました。