net模块可用来创建TCP服务器来接收网络请求,它提供了创建客户端以及服务端的方法

服务端:

创建服务器:

net.createServer([,options], connectionListener)

option 默认值 {allowHalfOpen: false, pauseOnConnect: false}

connectionListener创建服务器时自动为connection事件添加监视器

eg:

var net = require('net');
//创建服务端对象server,为connection事件添加监视器,socket是服务端的socket对象
var server = net.createServer(function(socket) { //'connection' listener
console.log('client connected');
socket.on('end', function() {
console.log('client disconnected');
});
 //传给客户端
socket.write('hello\r\n');
socket.pipe(socket);
});
//为listening事件添加监视器
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});

也可以写作:

var net = require('net');
var server = net.createServer(); server.on('connection', function(socket){
console.log('client connected');
console.log(socket);
//客户端断开连接时触发
socket.on('end', function() {
console.log('client disconnected');
});
//客户端输出
socket.write('hello\r\n');
socket.pipe(socket);
})
//'listening' 事件监听器,监听端口成功时触发
server.listen(8124, function() {
console.log('server bound');
});

服务端(server)事件如下:

listening: 绑定端口

connection: 每个客户端socket连接到服务器时触发

close: 服务端关闭

error: 服务端发生异常

---------------------------------

连接事件(socket)如下:

data: 当一端调用write()发送数据时,另一端触发

end: 当连接中任意端发送了FIN数据,两端都触发

connect: 用于客户端,socket与服务端连接成功时触发

drain: 任一端调用write()时,当前这端触发

error: 异常发生

close: socket完全关闭

timeout: 当一定时间后连接不再活跃是触发,通知用户此连接以被闲置

******************************************************************************************

客户端:

创建客户端,连接服务端

net.connect(options, [, connectionListener])

options:

port 客户端连接到port的端口,必填

host 客户端连接到的主机,默认localhost

eg:

var net = require('net');
//client是一个socket对象
var client = net.connect({port: 8124},
  //connect监视器
function() {
console.log('connected to server!');
client.write('world!\r\n'); //服务端的hello会在world之前输出
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
});
client.on('end', function() {
console.log('disconnected from server');
});

备注: socket是一个可读可写的stream对象,Tcp协议是面向连接的

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

http

创建服务器:

http.createServer([requestListener])

eg:

var http= require("http");
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

解析:

请求部分(req), 请求头信息:

req.method 请求类型

req.url url地址

req.httpVersion http协议版本

req.headers: 请求头信息里的请求头对象(headers)

类型: 只读流

响应部分(res):

res.writeHead()分为res.setHeader()与res.writeHead()两部分,两者都是定义头信息,但只有调用后者时才会写入连接

res.write(),res.end()都是定义文体部分,后者会发送信号告知服务器这次响应结束

*********************************************************************************************************

创建客户端

http.request(options, connect)

eg:

var options= {
hostname: "127.0.0.1",
port: 1334,
path: "/",
method: "GET"
};
var req= http.request(options, function(res){
console.log(res.statusCode);
console.log("HEADERS:"+ JSON.stringify(res.headers));
res.serEncoding('utf8');
res.on("data", function(chunk){
console.log(chunk);
})
});
res.end();

options包含请求头信息,包括

host: 服务器域名或IP地址,默认localhost

hostname: 服务器名称

port: 服务器端口

...

headers:请求头对象

request的write(),end()与浏览器的ajax调用几近相同

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

网络模块(net, http)小解的更多相关文章

  1. [原]Cachedb 网络模块文档

    Cachedb 网络模块文档 整体结构 多路复用 (epoll 模块) 事件驱动 (事件封装) 缓冲管理 (上层buffer管理) 设计思想 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚 ...

  2. selection伪元素小解

    上一篇:<RGBA与Opacity区别小解> p{font-size:14px;} 今天说一个简单的伪元素::selection,它的用武之地仅在于改变选中文本时文本的颜色和文本背景颜色. ...

  3. ansible网络模块安装httplib2

    ansible网络模块安装httplib2 在进行使用ansible的网络模块的时候,需要安装httplib2模块 下载地址: https://pypi.python.org/pypi?%3Aacti ...

  4. Poco库网络模块例子解析1-------字典查询

    Poco的网络模块在Poco::Net名字空间下定义   下面是字典例子解析 #include "Poco/Net/StreamSocket.h" //流式套接字 #include ...

  5. libevent for qt网络模块

    libevent for qt网络模块,直接替换qt的select模型,支持epoll,select,pool.使用非常简单,无需修改以前的代码结构 最近在开发im服务器,需要大并发链接.QT默认的是 ...

  6. 内嵌W5100的网络模块WIZ812MJ--数据手册

    1.简介 WIZ812MJ是一款内嵌了W5100(TCP/IP硬件芯片,内置PHY).MAG-JACK(带变压器的RJ45)和其他胶连逻辑的网络模块.它可以当作一个组件使用,而且不需要为W5100和变 ...

  7. iOS网络模块优化(失败重发、缓存请求有网发送)

    iOS开发中,一般都是通过AFN搭建一个简易的网络模块来进行与服务器的通信,这一模块要优化好没那么简单,需要花费很多时间与精力,仅仅根据这几年来的填坑经验,总结下这一块的需要注意的地方,也是给自己梳理 ...

  8. Qt 网络模块如何使用?

    1.网络模块介绍 类名 说明 中文 QAbstractNetworkCache The interface for cache implementations 缓存实现的接口 QNetworkCach ...

  9. BASE64Decoder小解

    BASE64Decoder小解 Base64 是网络上最常见的用于传输8Bit 字节代码的编码方式之一,大家可以查看RFC2045 -RFC2049 ,上面有MIME 的详细规范. Base64 要求 ...

随机推荐

  1. tomcat改端口的一些问题

    cmd运行netstat -anp查看端口使用情况,找到被占用端口的PID

  2. python 之调用Linux shell命令及相关高级应用

    最近根据老大要求,将数据进行同步备份,结合第三方提供的工具.第三方服务其实是有python demo的,本想研究下实际的python sdk搞个demo开发的,但是发现有些组建装起来确实头大,而且本公 ...

  3. Scala AOP

    trait Action { def doAction } trait TBeforeAfter extends Action { abstract override def doAction { p ...

  4. 数据库连接池druid

    推荐一个带监控的数据库连接池druid,阿里的,据说比c3p0连接池性能要好点,主要是带sql,spring,uri等访问监控,比较直观地址: https://github.com/alibaba/d ...

  5. VM10下Ubuntu无法安装vim的问题

    今天在VM10下重装了Ubuntu14.10,安装vim时发现如下问题 谷歌了一下,终于找到一种方法解决. 终端下: sudo vi /etc/apt/source.list 该命令将用vi打开一个文 ...

  6. Code Sign error: No code signing identities found: No valid signing identities

    Code Sign error: No code signing identities found: No valid signing identities 解决办法:如果证书可获取,最简办法就是把所 ...

  7. Windows Shell(外壳)编程相关

    Windows Shell名字空间介绍: http://blog.csdn.net/kingcom_xu/article/details/18943 Windows Shell 外壳编程基础教程(C# ...

  8. Strusts2--课程笔记6

    拦截器: Struts2的大多数核心功能都是通过拦截器实现的.拦截器之所以称之为"拦截器",是因为它可以在执行Action之前或之后拦截下用户请求,执行一些操作,以增强Action ...

  9. HDU 5829 Rikka with Subset

    快速数论变换ntt. 早上才刚刚接触了一下FFT,然后就开始撸这题了,所以要详细地记录一下. 看了这篇巨巨的博客才慢慢领会的:http://blog.csdn.net/cqu_hyx/article/ ...

  10. 《JS权威指南学习总结--6.8对象的三个属性》

    内容要点: 每一个对象都有与之相关的原型(prototype).类(class)和可扩展性 一.原型属性 1.对象的原型属性是用来继承属性的,这个属性是如此重要,以至于我们经常把 "0的原型 ...