TCP是传输层的,所以相当于通过传输层实现应用层服务

使用NodeJS原生的net模块,就可以打通TCP传输层,且其提供一个端口号进行监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 它可以打通tcp
import net from 'net'

// 定义一段HTML
const html = `<h1>Hello World</h1>`
// 定义一段请求头
const headers = [
'HTTP/1.1 200 OK',
'Content-Type: text/html',
`Content-Length: ${html.length}`,
'Date: Wed, 9 Sep 2009 09:09:09 GMT',
`\r\n`,
html
]

// net.createServer创建Unix域套接字,并返回一个server对象,接收一个回调函数
const server = net.createServer((socket)=> {
// socket事件:
// close 一旦套接字完全关闭就触发
// connect 当成功建立套接字连接时触发
// data 接收到数据时触发
// end 当套接字的另一端表示传输结束时触发,从而结束套接字的可读端
// 监听data事件,tcp有消息时触发
socket.on('data', (data)=> {
// 访问localhost:11451时,浏览器发送了个HTTP get请求
// 拦截get请求,模拟HTTP报文,使浏览器识别
if(/GET/.test(data.toString())) {
socket.write(headers.join('\r\n'))
socket.end()
}
})
})

// tcp层拥有端口号,监听一下端口号
server.listen(11451, ()=> {
console.log('server is running!', server.address())
})

确实能被浏览器识别