構建TCP服務
- 三次握手連接:
1.客戶端請求連接
2.服務器響應
3.開始傳輸
服務端
// 構建TCP服務 服務端
const net = require('net')
const server = net.createServer()
server.on('connection', clientSocket => {
console.log('有新的客戶端連接了')
//服務端通過 clientSocket 監聽 data 事件
clientSocket.on('data', data => {
// console.log(data)
// 把數據轉換成字符串格式
console.log('來自客戶端消息:', data.toString())
})
// 通過clientSocket 給當前連接的客戶端發送數據
clientSocket.write('hello,我是服務端')
// 服務端監聽 data 事件,獲取終端中輸入的數據
process.stdin.on('data', data => {
// 把終端中輸入的數據發送給客戶端
clientSocket.write(data.toString().trim())
})
})
// 監聽端口
server.listen(3000, () => console.log('Server runing at http://127.0.0.1:3000'))
客戶端
// 構建TCP連接服務 客戶端
const net = require('net')
const client = net.createConnection({
host: '127.0.0.1',
port: 3000
})
client.on('connect', () => {
console.log('連接服務器成功了')
// 當客戶端與服務端建立連接成功以后,客戶端就可以給服務器發數據了
client.write('word,我是客戶端')
// 當客戶端與服務端建立連接以后,我么可以監聽准端的輸入
// 獲取終端命令行中的輸入發送給服務端
process.stdin.on('data', data => {
// console.log(data)
// 這是獲取到的終端命令行輸入的數據
// console.log(data.toString())
// 把獲取到的終端命令行輸入的數據發給服務端
// client.write(data)
// 去除數據中的回車和空格再發送給服務端
client.write(data.toString().trim())
})
})
// 客戶端監聽 data 事件
// 當服務端發消息過來就會觸發該事件
client.on('data', data => {
// console.log(data)
// 把數據轉換成字符串格式
console.log('來自服務端消息:', data.toString())
})Ï
案例:聊天室
服務端:
// 構建TCP服務 服務端
const net = require('net')
// 創建一個服務器實例
const server = net.createServer()
const clients = []
server.on('connection', clientSocket => {
// 把當前連接的客戶端通信接口存儲到數據中
clients.push(clientSocket)
console.log('有新客戶端連接')
// 把服務端終端輸入的內容群發給所有客戶端
process.stdin.on('data', data => {
clientSocket.write('服務端公告:' + data.toString().trim())
})
clientSocket.on('data', data => {
console.log('來自客戶端消息:', data.toString())
// 遍歷所有的客戶端連接發送數據
clients.forEach(socket => {
// 排除掉發消息自身的那個客戶端
if (socket !== clientSocket) {
socket.write(data)
}
})
})
})
server.listen(3500, () => {
console.log('Server running At http://127.0.1.1:3500')
})
客戶端:
// 構建TCP連接服務 客戶端
const net = require('net')
// 創建一個客戶端實例
const client = net.createConnection({
host: '127.0.0.1',
port: 3500
})
// 監聽連接事件
client.on('connect', () => {
console.log('客戶端與連接服務器成功')
// 把終端輸入內容發給服務端
process.stdin.on('data', data => {
client.write(data.toString().trim())
})
})
client.on('data', data => {
console.log(data.toString())
})