TCP服务在网络应用中十分常见,目前大多数的应用都是基于TCP搭建而成的。
1. 什么是TCP?
tcp全名叫传输控制协议,在OSI模型(开放式系统互联通信参考模型
,由七层组成,分别为物理层、数据连接层、网络层、传输层、会话层、表示层、应用层
)中属于传输层协议。
许多应用层协议基于tcp构建,典型是HTTP、SMTP、IMAP等协议。
HTTP、SMTP、IMAP等 |
应用层 |
---|---|
加密\解密等 |
表示层 |
通信连接\维持会话 |
会话层 |
TCP\UDP |
传输层 |
IP |
网络层 |
网络特有的链路接口 |
链路层 |
网络物理硬件 |
物理层 |
TCP是面向连接的协议,其显著的特征是在传输之前需要三次握手:请求,确认,连接。

只有在会话形成之后,服务器端和客户端之间才能相互发送数据。
在创建会话的过程中,服务端和客户端分别提供一个套接字(socket
),这两个套接字共同形成一个链接。服务器端与客户端则通过套接字实现两者之间的操作。
2. 创建TCP服务器端
基本了解tcp的工作原理之后,开始创建一个TCP服务器端来接受网络请求:
//createServer.js
var net = require('net');
var server = net.createServer(socket => { //创建TCP服务端
socket.on('data', data => {
console.log(data.toString()) //服务端接收
});
socket.on('end', data => {
console.log('链接断开')
})
socket.write('欢迎光临我的示例:\n');
})
server.listen(8124, () => {
console.log('server bound');
})
通过net.createServer(listener)
创建一个tcp服务,listener
是链接事件connection
的监听器,也可以使用以下方式进行监听:
var server = net.createServer();
server.on('connection',socket =>{
//新的链接
})
server.listen(8124);
TCP服务端一旦建立连接成功后,会得到一个
socket
对象作为回调中的参数,我们可以操作这个socket对象,tcp连接的对象socket
是可读可写的流。作为一个流对象,因此能够监听data,end等事件;作为一个可写流,具有write()方法。
在tcp服务对象的
‘connection’
也能注册监听回调事件,也能从回调的参数中拿到上面所说socket
对象。
3. TCP客户端
通过net模块自行构造客户端进行会话:
//client.js
var net = reuire('net');
var client = net.connect({port:8124},fuction(){
console.log("client connected";
client.write('world!')
)
})
client.on('data',(data)=>{
console.log(data.tostring());
client.end();
});
client.on('end',()=>{
console.log('client disconnected');
});
当我们执行node client.js
和使用telent
的会话结果并无差异。
网友评论