关闭

Node教学--02 TCP服务器(小聊天工具)

标签: nodejs
253人阅读 评论(0) 收藏 举报
分类:

上一节中介绍了使用http模块。这一节我们使用net模块,这个模块包含了Node需要的所有TCP功能。

先给出个简单版的模块,与服务器连接之后,服务器将返回Hi,Bye ,然后断开连接

var net = require("net");
var chatServer = net.createServer();

chatServer.on("connection",function(client){
	client.write("Hi!\n");
	client.write("Bye!\n");
	client.end();
});
chatServer.listen(9000);


下面是这个小工具的完整版

/*获取net模块*/
var net = require("net");
/*创建服务器*/
var chatServer = net.createServer();
/*存储已连接的客户端*/
var clientList = [];
/*连接之后调用事件*/
chatServer.on("connection",function(client){
	/*取客户端的地址以及端口作为客户端名称*/
	client.name = client.remoteAddress + ':' + client.remotePort;
	/*客户端弹出接待语*/
	client.write('Hi'+client.name+"\n");
	/*服务器端显示新加入的客户端*/
	console.log(client.name+"joined");
	/*将新客户端加入已连接数组*/
	clientList.push(client);
	/*客户端接收数据之后,进行信息的群发*/
	client.on("data",function(data){
		broadcast(data,client);
	})
	/*客户端退出操作*/
	client.on("end",function(){
		console.log(client.name+"quit");
		/*从当前的客户端开始截取一个单位,并替换为xx,如果没有写,就将这项删除,节点上的销毁*/
		clientList.splice(clientList.indexOf(client),1);
	})
	/*连接错误,服务器端进行错误提示*/
	client.on("error",function(e){
		console.log(e);
	})
});

/*信息群发函数*/
function broadcast(message,client){
	/*无效连接列表*/
	var cleanup = [];
	/*遍历所有客户端*/
	for(var i =0;i<clientList.length;i++){
		/*对非发送方客户端进行操作*/
		if(client!== clientList[i]){
			/*判断该客户端是否可写*/
			if(clientList[i].writable){
				/*发送给其他客户端信息*/
				clientList[i].write(message);
			}else{
				/*将该客户端推入清除列表*/
				cleanup.push(clientList[i]);
				/*销毁该客户端,实际上的销毁*/
				clientList[i].destroy();
			}
		}
	}
}
/*启动端口监听*/
chatServer.listen(9000);
由于涉及到信息的交互  所以这里我们需要用telnet,linux可以直接用,windows的话默认是关闭的,大家可以百度下 如何开启telnet 非常简单



成功之后  可以开启多个telnet   进行单机版的多客户端沟通

下面给出源码链接

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:97447次
    • 积分:1968
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:0篇
    • 译文:11篇
    • 评论:20条
    博客专栏
    最新评论