1.启动一个本地的服务

下面是官方的例子,会生成一个随机端口,返回的是纯文本:

var net = require('net');
var server = net.createServer((socket) => {
socket.end('goodbye\n');
}).on('error', (err) => {
// 处理错误
throw err;
}); // 随机端口
server.listen(() => {
console.log('opened server on', server.address());
});

指定一个端口:

server.listen({
port: 80
},() => {
console.log('opened server on', server.address());
});

但是这时却报错了:Error: listen EACCES 0.0.0.0:80。

EACCES 表示的是 E|ACCES,即 acces error 访问错误,一般指没有权限,因为 0 ~ 1023 端口是公认端口,其对应的服务都是指定/默认的,需要权限去访问。

于是就需要使用管理员权限执行该命令:sudo node main.js。但是又出现问题了:Error: listen EADDRINUSE :::80。网上查了下查看端口的命令:lsof -i tcp:80,但是显示的列表里却找不到80端口对应的进程,是不是看漏了?执行一下 lsof -i | grep ':80',还是没有。再查下,原来 mac 有启动默认的 apache 服务,关掉 sudo apachectl stop。再执行 node 就成功了。

2. 返回文件.html

引入文件模块 var fs = require('fs'),使用异步读取文件的方法 fs.readFile:

 var server = net.createServer(socket => {
fs.readFile('../html/index.html', {
encoding: 'utf-8'
}, (err, data) => {
socket.end(data);
});
})

fs.readFile 是异步的,所以不能用它返回的值(undefined),可以用 fs.readFileSync

var server = net.createServer(socket => {
var data = fs.readFile('../html/index.html', {
encoding: 'utf-8'
});
socket.end(data);
}).on('error', (err) => { throw err; });

一个最简单的本地服务器就这样完成了。注意:这是 tcp 服务器,不是 http 服务器,浏览器之所以能访问是因为 http 是建立在 tcp 之上的。

3.简单的 tcp 聊天室

let net = require('net');
// 保存连接 server 的 socket
let sockets = [];
let server = net.createServer((socket) => {
sockets.push(socket);
socket.on('data', (data) => {
sockets.forEach((e) => {
// 排除本身,转发给其他 socket
   if(e != socket) {
e.write(data);
}
});
}); // 连接断开的时候从 sockets 里删除,避免错误
socket.on('end', function () {
let index = sockets.indexOf(socket);
sockets.splice(index, 1);
});
}).on('error', (err) => {
// 处理错误
throw err;
}); // 指定 8088 端口
server.listen(8088, () => {
console.log('opened server on', server.address());
});

运行本示例,再使用 telnet 127.0.0.1 8088 连接,就能看到效果了。

参考

1.node_File_System

2.node_Net

3. Ryan Dahl 的 Node.js 教程

[node.js 学习]1.start a simple server的更多相关文章

  1. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  2. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  3. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  4. Node.JS学习——学习笔记

    Node.JS--学习笔记 2020年02月23日11:52:01 我打算自学NodeJS-通过阅读NodeJS官网来完成. https://nodejs.org/dist/latest-v13.x/ ...

  5. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  6. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  7. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  8. node.js学习(1)

    新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...

  9. 我的Node.js学习历程

    学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...

随机推荐

  1. alienware Win8 系统安装

    原作者网名 alienware-小来: 我的外星人 老是装系统出错.我觉得写的不错.把原作者的东西拿过来.. 对于win7系统的用户来说想要体验下win8.1系统,或者是原来win8.1系统加装固态后 ...

  2. Android ORM -- Litepal(2)

    4. 更新数据 ContentValues value = new ContentValues(); value.put("name", "计算机网络2"); ...

  3. Android 手机卫士8--删除通话记录

    1.编写代码需要注意bug: 再删除通话记录的时候,删除的是以前的通话记录,本次拦截下来的电话号码,通话记录没有删除?????? 问题原因:数据库中本次通话记录的电话号码还没有插入,就做了删除操作 2 ...

  4. 使用MyBatis Generator自动创建代码(dao,mapping,poji)

    连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...

  5. H5 meta小结

    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, ...

  6. 学习笔记 MSSQL显错手工注入

    和朋友一起学习,速度就是快.感谢珍惜少年时. 网上很多都在长篇大论MSSQL显错手工注入,其实原理只有一小段.如下: ' and (查询一段内容)=1 and 'C'='Cnvarchar类型(查询一 ...

  7. js与native交互

    js与native交互 UIWebView Native调用JS,使用stringByEvaluatingJavaScriptFromString来解释执行js脚本. //script即为要执行的js ...

  8. CALayer的transform属性

    先来与View比较一下 View:transform -> CGAffineTransformRotate... layer:transform -> CATransform3DRotat ...

  9. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  10. 排序 order by 的用法

    order by  跟在select* from 后面 order by 默认的是升序, asc 升序  desc 降序 select * from 表名 order by  字段名  asc 在带有 ...