node 简易socket示例 (简易聊天室)

612 阅读1分钟

node版,利用socket连接

socket和tcp, http的关系(个人理解):

是API接口(相当于封装了TCP协议能力的API接口)。程序员需要用tcp协议的能力时,需要API。 和http的关系: 类似tcp和http的关系

node使用基础版

// server.js
const net = require('net')
// 创建TCP服务器
const server = net.createServer((socket) => {
    console.log('客户端连接')
    // 监听客户端的数据
    socket.on('data', (data) => {
        console.log('监听客户端的数据: ', data.toString())
    });
    // 监听客户端断开连接事件
    socket.on('end', (data) => {
        console.log('客户端断开连接')
    });
    // 发送数据给客户端
    socket.write('哈哈哈,我是一个测试 \r\n')
})
// 启动服务
server.listen(8088, () => {
    console.log('服务创建')
})



// client.js
const net = require('net');
// 连接服务器
const client = net.connect({port: 8088}, () => {
    console.log('连接服务器');
    client.write('http://xingxin.me \r\n')
})
// 接收服务端的数据
client.on('data', (data) => {
    console.log('接收服务端的数据: ', data.toString())
    // 断开连接
    client.end()
})
// 断开连接
client.on('end', () => {
    console.log('断开连接')
})

简易聊天室

// server.js
const net = require('net')
// 创建TCP服务器
const server = net.createServer()
// 存储所有客户端socket
let sockets = []
server.on('connection', function(socket) {
    console.log('Got a new connection')
    sockets.push(socket)
    socket.on('data', function(data) {
        console.log('Got data: ', data)
        sockets.forEach(function(otherSocket) {
            if (otherSocket !== socket) {
                otherSocket.write(data)
            }
        })
    })
    socket.on('close', function() {
        console.log('A client connection closed')
        let index = sockets.indexOf(socket)
        sockets.splice(index, 1)
    })
})
server.on('error', function(err) {
    console.log('Server error: ', err.message)
})
server.on('close', function() {
    console.log('Server closed')
})
server.listen(8088)



// client.js
const net = require('net')
process.stdin.resume()
process.stdin.setEncoding('utf8');
const client = net.connect({ port: 8088 }, () => {
    console.log('Connected to server')
    // 获取输入的字符串
    console.log('input: ')
    process.stdin.on('data', (data) => {
        // 发送输入的字符串到服务器
        console.log('input: ')
        client.write(data)
        // 输入 'close' 字符串时关闭连接
        if (data === 'close\n') {
            client.end()
        }
    });
});
// 获取服务端发送过来的数据
client.on('data', (data) => {
    console.log('Other user\'s input', data.toString())
})
client.on('end', () => {
    console.log('Disconnected from server')
    // 退出客户端程序
    process.exit()
})