net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法

创建TCP服务器

net.createServer方法

创建客户端去连接服务器

net.connect方法

简易聊天室服务端

chatServer.js

var net = require('net');

// 创建TCP服务器
var server = net.createServer();
// 存储所有客户端socket
var sockets = []; //接收客户端连接请求
server.on('connection', function(socket) {
console.log('Got a new connection');
sockets.push(socket);
//获取客户端发送过来的数据
socket.on('data', function(data) {
console.log('Got data: ', data);
//服务器广播数据,把来自客户端的数据转发送给其他所有客户端
sockets.forEach(function(otherSocket) {
if (otherSoecket !== socket) {
otherSocket.write(data);
}
});
]);
// 把关闭连接的客户端从服务器广播列表中给删除掉
socket.on('close', function() {
console.log('A client connection closed');
var index = sockets.indexOf(socket);
sockets.splice(index, 1);
});
}); server.on('error', function(err) {
console.log('Server error: ', err.message);
});
// 监听客户端断开连接事件
server.on('close', function() {
console.log('Server closed');
});
// 启动服务
server.listen(8080);

简易聊天室客户端

var net = require('net');

process.stdin.resume();
process.stdin.setEncoding('utf8');
// 连接服务器
var client = net.connect({ port: 8080 }, function() {
console.log('Connected to server'); // 获取输入的字符串
console.log('input: ');
process.stdin.on('data', function(data) {
// 发送输入的字符串到服务器
console.log('input: ');
client.write(data); // 输入 'close' 字符串时关闭连接
if (data === 'close\n') {
client.end();
}
});
}); // 获取服务端发送过来的数据
client.on('data', function(data) {
console.log('Other user\'s input', data.toString());
});
// 断开连接
client.on('end', function() {
console.log('Disconnected from server');
// 退出客户端程序
process.exit();
});

process是一个Node.js的全局模块

process.stdin用于获取来自标准输入的可读流

执行node chatServer.js启动服务端

执行node chatClient.js启动客户端,可同时启动多个

会在服务端和其他客户端开到这个客户端的输入内容

Node.js的net模块的更多相关文章

  1. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  2. Node.js的Formidable模块的使用

    今天总结了下Node.js的Formidable模块的使用,下面做一些简要的说明. 1)     创建Formidable.IncomingForm对象 var form = new formidab ...

  3. Node.js入门:模块机制

    CommonJS规范      早在Netscape诞生不久后,JavaScript就一直在探索本地编程的路,Rhino是其代表产物.无奈那时服务端JavaScript走的路均是参考众多服务器端语言来 ...

  4. node.js中express模块创建服务器和http模块客户端发请求

    首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...

  5. node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...

  6. node.js中net模块创建服务器和客户端(TCP)

    node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...

  7. 第5月第10天 node.js的request模块

    1.node.js的request模块 http://www.cnblogs.com/meteoric_cry/archive/2012/08/18/2645530.html

  8. node.js使用mysql模块的坑

      之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用.   ...

  9. node.js的http模块的基础 学到的东西

    node.js的http模块的基础 学到的东西 其中客户端:我们在node.js中如果要请求服务端中的js或者其他脚本的话要使用http.request()方法他会返回http.ClientReque ...

随机推荐

  1. jq分页异步刷新 ,全局刷新问题

    在做分页的时候,可能点击下一页全部刷新 这样写会导致动态刷新,页面全部刷新了 $("#pageList a").click(function () { var $s = $(thi ...

  2. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”

    原因:在java安装后进行环境变量配置其中 export JAVA_HOME="/opt/java/jdk1.8" export PATH=$JAVA_HOME 即结束 错误原因: ...

  3. 修改Esxi克隆的CentOS的IP地址

    1.读取/etc/udev/rules.d/70-persistent-net.rules文件中eth1的MAC地址. 2.编辑文件 /etc/sysconfig/network-script/ifc ...

  4. Orchard CRM 更新 - 同时支持 Microsoft Dynamics CRM 2011, 2013, 2015, 2016!

    本版本支持: 使用Orchard 1.8.1 系统 Dynamics CRM 2015 DLL .Net Framework 4.5.2 演示版本: http://www.orchardcrm.com ...

  5. CastleActiveRecord在多线程 事务提交时数据库资源竞争导致更新失败的测试结果记录

    CastleActiveRecord 经过测试,隔离级别: // 摘要: ,         ,         ,         ,         ,         ,         ,   ...

  6. WPF:自动执行"机器人"程序若干注意事项

    企业应用中,经常会遇到一些需要定时自动执行的程序来完成某些功能,比如:自动定时从第三方web service取回数据.定时对历史数据进行清理.定时向ftp上传业务数据... 这类程序,我习惯称为“机器 ...

  7. Android的媒体管理框架:Glide

    Glide是一个高效.开源. Android设备上的媒体管理框架,它遵循BSD.MIT以及Apache 2.0协议发布.Glide具有获取.解码和展示视频剧照.图片.动画等功能,它还有灵活的API,这 ...

  8. Android Studio单元测试入门

    Android Studio单元测试入门 通常在开发Android app的时候经常会写一些小函数并验证它是否运行正确,通常做法我们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程 ...

  9. web安全——目录

    说明 写这个目录是为了方便阅读.也是为了记录统一的问题. 这个系列,并不一定是全的,也不一定是对的,所以请大家多做过滤. 这里面场景比较多的是本人在实践中遇到的问题,然后自己思考抽象的. 目录 web ...

  10. 关于安装Visual Studio 2015 RC版卡主不动的解决方案

    在官方网站下载了vs_community.exe自动下载安装的软件进行安装,安装到github时候 卡了1个小时 一直显示正在获取,遂感觉不大对劲,使用了FQ程序,过了2分钟果然正常获取安装,进入了下 ...