net模块

2021-03-02  本文已影响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()
        }
    })
}
上一篇下一篇

猜你喜欢

热点阅读