配色: 字号:
第十课 TCP服务和客户
2020-12-22 | 阅:  转:  |  分享 
  
教师:王晓玲QQ:4260924邮箱:4260924@qq.comNo
de.js开发主要内容Node中的Socketnet.Server的使用net.Socket的使用Node中的Sock
etNode是一个面向网络而生的平台,利用Node.js提供的API接口可以十分方便地搭建网络服务器。在Node中有四种Soc
ket,分别对应实现TCP、UDP、HTTP和HTTPS,这些Socket接口分别被被封装到Net、dgram、http和http
s模块中,适用于服务器和客户端,包含了Server类、Socket类以及一些预先定义的方法、事件和属性。TCP:是一种面向连接的
、基于字节流的传输控制层协议,属于传输层协议;UDP:是一种无连接的、基于数据报的数据包协议,属于传输层协议;HTTP:是客户
端浏览器或其他程序与Web服务器之间的应用层通信协议;HTTPS:是在HTTP的基础上加入了SSL协议,是采用密文的形式进行通信
。net.Server代码示例Server服务的示例代码:varnet=require(''net'');//引入net
模块varserver=net.createServer(function(client){//创建一个服务对象
console.log(''客户端已经链接'');client.end(''HelloWorld!\r\n'');//向cl
ient发送数据});server.listen(8000);console.log("Serverrunningo
nport8000");这个示例包含了net模块的相关信息如下:1、从Node.js的核心请求net模块并赋予一个变量,方
便在脚本中使用2、使用http.createServer创建了新的TCP服务器对象。3、脚本将一个匿名函数传递给TCP服务器,
告诉TCP服务器对象每当接收到客户端连接时需要做什么。在本例中当客户端到来时,控制台显示“客户端已经连接”并向客户端发送''Hell
oWorld!''字符串,然后关闭连接。4、脚本的第六行定义了TCP服务器的端口。这意问着可以使用8000端口来访问服务器5、
脚本将服务器的访问端口信息记录到控制台上net.Server方法net.createServer([options][,
connectionListener]):描述:CreatesanewTCPorIPCserver.创建一个新的
TCP或IPC服务。参数:optionsallowHalfOpen表示是否允许一个半
开的TCP连接。默认值:falsepauseOnConnect一旦来了连接,是否暂停套接字。默认值:f
alseconnectionListener为''connection''事件自动设置一个监听器。返回:
如果allowHalfOpen被设置为true,那么当socket.end()被显式调用时,
如果对方套接字发送了一个FIN包,服务只会返回一个FIN数据包,这会持续到后来连接处在半闭状态(不可读但是可写)。如果p
auseOnConnect被设置为true,那么与连接相关的套接字都会暂停,也不会从套接字句柄读取数据。这样就允许连接在进
程之间传递,避免数据被最初的进程读取。如果想从一个暂停的套接字开始读数据,需要调用socket.resume()。net.Se
rverServer对应的方法描述:序号方法&描述1server.listen(port[,host][,backl
og][,callback])监听指定端口port和主机host连接。默认情况下host接受任何IPv4地址
(INADDR_ANY)的直接连接。端口port为0时,则会分配一个随机端口。2server.close([callb
ack])服务器停止接收新的连接,保持现有连接。这是异步函数,当所有连接结束的时候服务器会关闭,并会触发''close''事件
3server.address()操作系统返回绑定的地址,协议族名和服务器端口。4server.getConnection
s(callback)异步获取服务器当前活跃连接的数量。当socket发送给子进程后才有效;回调函数有2个参数err
和count。net.Server方法server.listen(port[,host][,backlog][,cal
lback])参数:options必须。支持以下参数属性:porthosting>path如果指定了port参数则会被忽略。backlogserver.li
sten()的通用参数。exclusive默认false。callbacks
erver.listen()的通用参数。返回:Returns:如果exclusive是fa
lse(默认),则集群的所有进程将使用相同的底层句柄,允许共享连接处理任务。如果exclusive是true,则句柄不会被共
享,如果尝试端口共享将导致错误。net.Server方法server.close([callback])描述:停止ser
ver接受建立新的connections并保持已经存在的connections.当所有的connections关闭同时server
响应''close''事件的时候,server将会最终关闭.一旦''close''发生将会调用可选的回调函数.与该事件不同,如果服
务器在关闭时未打开,则将使用错误作为唯一参数。参数:无返回:net.Server方法serve
r.getConnections(callback)描述:异步获取服务器的当前并发连接数。参数:无返回:er>当socket被传递给子进程时工作。回调函数的两个参数是err和count。server.address()
描述:返回绑定的ip地址,地址族和操作系统报告的服务端口参数:无返回:object如:{port:12346,fa
mily:''IPv4'',address:''127.0.0.1''}net.Server事件描述Server对应的事
件描述:序号事件&描述1listening当服务器调用server.listen绑定后会触发。2connecti
on当新连接创建后会被触发。socket是net.Socket实例。3close服务器关闭时会触发。注意,如果存在连接
,这个事件不会被触发直到所有的连接关闭。4error发生错误时触发。''close''事件将被下列事件直接调用。net.Se
rver综合示例varnet=require(''net'');//引入net模块varserver=net.cre
ateServer();server.listen(8000,function(){console.log(''Serv
erlisteningon''+server.address().address+'':''+server.a
ddress().port);});server.on(''connection'',function(socket){
console.log(''connected:''+socket.remoteAddress+'':''+soc
k.remotePort);});server.on(error,function(err){throwerr
;server.close();}net.Socket客户端通过net模块除了能够构建服务器而外,我们还可以构建
构造客户端与服务器进行会话。Socket对应的示例代码:varnet=require(''net'');varclien
t=net.connect({port:8080},function(){console.log(''连接到服务器
!'');});client.on(''data'',function(data){console.log(data
.toString());client.end();});client.on(''end'',function(){
console.log(''断开与服务器的连接'');});net.Socket客户端方法Socket对应的方法描述:
序号方法&描述1newnet.Socket([options])构造一个新的socket对象。2socket.c
onnect(port[,host][,connectListener])指定端口port和主机host,创建so
cket连接。参数host默认为localhost。通常情况不需要使用net.createConnection打开
socket。只有你实现了自己的socket时才会用到。3socket.write(data[,encoding][,
callback])在socket上发送数据。第二个参数指定了字符串的编码,默认是UTF8编码。4socket.en
d([data][,encoding])半关闭socket。例如,它发送一个FIN包。可能服务器仍在发送数据。5so
cket.destroy()确保没有I/O活动在这个套接字上。只有在错误发生情况下才需要。(处理错误等等)。net.Soc
ket客户端方法Socket对应的方法描述:序号方法&描述6socket.pause()暂停读取数据。就是说,不会再触
发data事件。对于控制上传非常有用。7socket.resume()调用pause()后想恢复读取数据。8so
cket.setTimeout(timeout[,callback])socket闲置时间超过timeout毫秒后,将
socket设置为超时。9socket.address()操作系统返回绑定的地址,协议族名和服务器端口。返回的对象有3
个属性,比如{port:12346,family:''IPv4'',address:''127.0.0.1''}。net
.Socket客户端事件net.createConnection(options[,connectListener])描述:
指定端口port和主机host,创建socket连接同connect(port[,host][,connectL
istener])参数:options必须。调用newnet.Socket([options])和
socket.connect(options[,connectListener])方法都会传入。connectListene
rnet.createConnection()方法的通用参数。如果制定了,将被添加为返回socket
上的''connect''事件上的监听器。返回:新创建的socket,用于开始连接。附加的选
项:timeout如果设置,将会用来在socket创建之后连接开始之前调用socket.setTime
out(timeout)。net.Socket客户端事件socket.write(data[,encoding][,cal
lback])描述:在socket上发送数据;参数:data:发送的数据,是一个Buffer对象;encoding:
发送数据字符串的编码格式,-默认是UTF8编码。callback:当数据最终都被写出之后,可选的callback参数将
会被执行-可能不会立即执行。返回:boolean:如果全部数据都成功刷新到内核的缓冲则返回true。如果全部或部分数据在用户内中排队,则返回false。当缓冲再次空闲的时候将触发''drain''事件。net.Socket客户端事件Socket对应的事件描述:序号事件&描述1connect成功建立socket连接时触发。2data当接收到数据时触发。3end当socket另一端发送FIN包时,触发该事件4timeout当socket空闲超时时触发,仅是表明socket已经空闲。用户必须手动关闭连接。5error错误发生时触发。6close当socket完全关闭时触发。参数had_error是布尔值,它表示是否因为传输错误导致socket关闭。
献花(0)
+1
(本文系中转站199首藏)