您的位置:首页 > 理论基础 > 计算机网络

基于nodejs的tcp服务器与客户端

2015-12-11 11:26 696 查看
不得不说nodejs的强大API实现了之前复杂网络编程的简单化。

一下是server端的js程序,实现各个socket连接的轮询。

var  net = require('net');
var server = net.createServer();
var sockets = [];
server.on('error', function (err) {
console.log('error occured', err.message);
});
server.on('close',function() {
console.log('server closed');
});
server.on('connection', function (socket) {
sockets.push(socket);
// console.log(socket);
socket.on('data', function (data) {
console.log('got data : ' + data);
sockets.forEach(function (otherSocket) {
if(socket !== otherSocket){
otherSocket.write(data);
};
});
socket.on('close', function(){
console.log('connection closed');
var index = sockets.indexOf(socket);
sockets.splice(index,1);
});
});
});
server.listen(4000);


以下是client端的js程序,可以不使用telnet进行tcp连接。client端也有连接断开重连功能。

var net = require('net');
var port = 4000;
var host = 'localhost';
var quitting = false;
var conn;
var retryTimeout = 3000;

var retriedTimes = 0;
var maxRetrieds = 10;

process.stdin.resume();
process.stdin.on('data', function (data) {
if(data.toString().trim().toLowerCase() === 'quit'){
quitting = true;
conn.end();
process.stdin.pause();
} else {
conn.write(data);
}

});

(function connect() {
function reconnect() {
if(retriedTimes > maxRetrieds){
throw new Error('give up');
} else {
retriedTimes += 1;
setTimeout(connect, retryTimeout);
}
}
conn = net.createConnection(port);
conn.on('connect', function () {
retriedTimes = 0;
console.log('connected to server');
});
conn.on('error', function (err) {
console.log('err occured :' + err.message);
});
conn.on('close', function () {
if(!quitting){
console.log('reconnect will begin');
reconnect();
} else {
console.log('see you next');
}
})

} () );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: