1. 使用net发出请求
1.1 连接服务器
const net = require("net")
const PORT = 80
const HOST = "baidu.com"
/**
* 第一步,与服务器建立连接,这一步对应着 tcp 连接的握手阶段
*
* 1. 客户端通过 connect() 调用向服务端发送 SYN 以希望建立连接,此刻客户端进入 SYN_SENT 状态
*
* 2. 服务端收到客户端的 SYN 请求后,会给客户端发送 SYN + ACK,此刻服务端进入 SYN_RCVD 状态;
*
* 3. 客户端收到服务端的 SYN + ACK 响应后,会给服务端发送 ACK,
* 此刻客户端与服务端(在收到客户端的 ACK 确认后)分别进入 ESTABLISH 状态。
*
* 一旦完成上述的三个步骤,客户端和服务端之间就可以相互发送包括数据的报文段了。
**/
const socketStream = net.createConnection(
{
host: HOST,
port: PORT,
},
() => {
console.log(`端口:${PORT} 主机:${HOST} 连接成功`)
}
)
const net = require("net")
const PORT = 80
const HOST = "baidu.com"
const socketStream = net.createConnection(PORT, HOST)
socketStream.on("connect", () => {
console.log(`端口:${PORT} 主机:${HOST} 连接成功`)
})
1.2 发送请求报文
socketStream.write("发送的消息")
1.2.1 发出http请求报文
http 请求格式
请求方法 url 协议版本\r\n <= 请求行
头部字段名1:头部字段值1\r\n <= 请求头
头部字段名2:头部字段值2\r\n
\r\n
请求正文 <= 请求体
`GET / HTTP/1.1
Host: baidu.com
Connection: keep-alive
`
"GET / HTTP/1.1\r\nHost: baidu.com\r\nConnection: keep-alive\r\n\r\n"
"GET / HTTP/1.1\r\n" +
"Host: baidu.com\r\n" +
"Connection: keep-alive\r\n" +
"\r\n"
2. 使用 net 创建 tcp 服务器
const net = require("net")
const server = net.createServer()
const PORT = 8080
const HOST = "localhost"
server.listen(PORT)
server.on("listening", () => {
console.log(`---------------->http://${HOST}:${PORT} Server is ready!`)
})
// 客户端连接成功的调用
server.on('connection', (socket)=> {
console.log("客户端连接完成");
socket.on('data', (chunk) => {
console.log('客户端发来的信息', chunk.toString('utf-8'));
const Buf = Buffer.from(`HTTP/1.1 200 OK
Content-Type: html/text
你好
`, 'utf-8');
socket.write(Buf);
socket.end();
});
});
const net = require('net');
const server = net.createServer((socket) => {
// 客户端连接成功的调用
socket.on('data', (data) => {
console.log(`Server: ${data}!`);
socket.write(data);
});
socket.on('close', () => {
console.log('Server: connection is closed!');
});
})
const PORT = 8080
const HOST = "localhost"
server.listen(PORT, HOST, () => {
console.log(`---------------->http://${HOST}:${PORT} Server is ready!`)
});
客户端连接的socket 调用 end 方法,会主动触发 close 事件
clientSocket.end();
clientSocket.on('close', () => {
console.log('Server: connection is closed!');
});