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. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

  2. Unmanaged Exports使用方法

    Unmanaged Exports,可以利用C#生成非托管的DLL文件. 从https://sites.google.com/site/robertgiesecke/下载UnmanagedExport ...

  3. mysql 安装

    编译环境yum install gcc gcc-c++ ncurses-devel perl 依赖yum install boost boost-devel boost-doc 安装cmake wge ...

  4. solr添加多个core

    在D:\solr\solr_web\solrhome文件夹下: 1)创建core0文件夹 2)复制D:\solr\solr_web\solrhome\configsets\basic_configs/ ...

  5. jQuery获取短信验证码+倒计时实现

    jQuery 短信验证码倒计时 <script type="text/javascript" charset="utf-8"> $(function ...

  6. ASP.NET中后台数据和前台控件的绑定

    关于ASP.NET中后台数据库和前台的数据控件的绑定问题 最近一直在学习个知识点,自己创建了SQL Server数据库表,想在ASP.NET中连接数据库,并把数据库中的数据显示在前台,注意,这里的数据 ...

  7. BFC布局

    这几天都没有写博客,自己的懒惰又要跑出来了,发觉不能再这样下去了,不然就什么都不想干了,然后将之前已经写得差不多的博客重新检视了一遍.这篇博客已经写得挺久的了,但是一直没有发布,现在补充了一些,也让自 ...

  8. Windows编译Nginx源码

    Windows下的Nginx战役,人不作就不会死!就像是拿着麦当劳的优惠券去买肯德基一样,别扭啊 Nginx是一款轻量级的Web 服务器.反向代理服务器.邮件服务器等等集一大串荣誉于一身的大牌人物!他 ...

  9. linux中grep的应用

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  10. 移动端web开发——视口

    本篇主要是记录一下移动端视口的分类说明和其它的一些知识.在开始之前,先看一个典型的例子: <meta name="viewport" content="width= ...