net模块

作者: 静昕妈妈芦培培 | 来源:发表于2021-03-02 10:19 被阅读0次

    例1:
    服务器端代码:

    const net = require('net')
    
    //创建服务器, 当一个新的连接建立的时候触发回调。回调中的参数client为连接对象
    const server = new net.Server((client) => {
    
        //向连接上的客户端发送消息
        client.write('你好,连接成功!')
    
        client.setEncoding('utf8')
    
        //读取客户端发来的消息
        client.on('data', (chunk) => {
            console.log(chunk)
        })
    
    
    })
    
    //启动一个 TCP 服务监听输入的 port 和 host
    server.listen('9527', () => {
        console.log(`opend server on ${server.address().address}:${server.address().port}` )
    })
    

    客户端代码:

    const net = require('net')
    
    //创建一个 socket 对象,初始化一个 TCP 连接。当连接上服务端的时候触发回调
    const client = net.createConnection(9527, () => {
    
        console.log('已连接到服务器');
        //向服务器端发送消息
        client.write('你好世界!\r\n');
    });
    
    client.setEncoding('utf8')
    
    //读取服务器端发送过来的数据
    client.on('data', (chunk) => {
        console.log(chunk)
        client.end()
    })
    
    client.on('end', (chunk) => {
        console.log('已和服务器端断开连接')
    })
    
    

    开启两个终端,分别运行上面代码:
    客户端:


    image.png

    服务器端:


    image.png

    例2:聊天室功能
    服务端代码:

    const net = require('net')
    
    //创建服务器,
    const server = new net.createServer()
    
    //存储连接上服务器的所有客户端的数组
    let clients = []
    let clientName = 0
    
    //当一个新的连接建立的时候触发.回调中的参数client为连接对象
    server.on('connection', (client) => {
    
    
        client.name = ++clientName
        clients[client.name] = client
        client.write(`${client.name}已上线`)
        client.setEncoding('utf8')
    
        //读取客户端发来的消息
        client.on('data', (chunk) => {
            console.log(chunk)
    
            broadcast(client, chunk)
        })
    
        client.on('error', (e) => {
            console.log('client error' + e)
            //关闭client
            client.end()
        })
    
        client.on('close', (e) => {
            //把关闭的哪个客户端从clients数组中删除
            delete clients[client.name]
            console.log(client.name + '下线了')
        })
    
    
    })
    
    function broadcast(client, chunk) {
        //向连接上服务器的每一个客户端发送消息
        for(var key in clients) {
            clients[key].write(client.name + '说:' + chunk)
        }
    }
    
    //启动一个 TCP 服务监听输入的 port 和 host
    server.listen('9527', () => {
        console.log(`opend server on ${server.address().address}:${server.address().port}` )
    })
    
    

    客户端代码:

    const net = require('net')
    const readline = require('readline')
    
    //创建一个 socket 对象
    const client = new net.Socket()
    
    client.setEncoding('utf8')
    
    //在给定的套接字上启动一个连接,当连接上服务端的时候触发回调
    client.connect(9527, '127.0.0.1', () => {
        console.log('已连接到服务器');
        //向服务器端发送消息
        client.write('你好世界!\r\n');
    })
    
    
    //读取服务器端发送过来的数据
    client.on('data', (chunk) => {
        console.log(chunk)
        say()
    })
    
    client.on('error', (err) => {
        console.log('error' + err)
    })
    
    
    
    client.on('close', (chunk) => {
        console.log('已和服务器端断开连接')
    })
    
    const r1 = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    })
    
    function say () {
        r1.question('请输入:\n', (inputMsg) => {
            if(inputMsg !== 'bye') {
                //向服务器端发送数据
                client.write(inputMsg + '\n')
            }else {
                client.destory()
                r1.close()
            }
        })
    }
    

    相关文章

      网友评论

          本文标题:net模块

          本文链接:https://www.haomeiwen.com/subject/jbstqltx.html