使用Nodejs搭建简单的TCP聊天服务器

1.导入模块,监听端口
var net = require('net');
//创建服务器
var server = net.createServer(8081);
2.接受客户端连接
//监听连接事件
server.on('connection', function (socket) {
    socket.write("you have connected the server,input 'q' to quit\n");
    sockets.push(socket);
    console.log(sockets.length + ' have connected');
});
3.从连接中读取数据
//创建集合管理socket
var sockets = [];
//socket监听数据
socket.on('data', function (data) {
    //如果监听到的数据是'q',则断开socket连接
    if (data.toString().trim().toLowerCase() === 'q') {
        socket.write('you have quited the chat room\n');
        return socket.end();
    }
    //将socket传输的数据广播到其他socket
    sockets.forEach(function (otherSocket) {
        //排除掉发送数据的socket
        if (otherSocket !== socket) {
            otherSocket.write(data.toString());
        }
        })
    });
    //socket连接断开后从sockets中移除socket
    socket.on('end', function () {
        console.log('a client have quited the chat room\n');
        sockets.splice(sockets.indexOf(socket), 1);
        console.log(sockets.length + ' have connected');
    });
效果

1.通过node server.js启动服务端
在这里插入图片描述
2.通过telnet localhost 8081分别启动客户端1和客户端2

客户端:在这里插入图片描述
服务端:
在这里插入图片描述
3.两个客户端相互通信,客户端1发送hello,客户端2发送world
在这里插入图片描述
截图中客户端1的hello是发送出去的,world是收到的数据

4.客户端输入’q’退出

客户端:
在这里插入图片描述
服务器端:
在这里插入图片描述

完整代码

server.js

var net = require('net');
//创建集合管理socket
var sockets = [];
//创建服务器
var server = net.createServer().listen(8081);

//监听连接事件
server.on('connection', function (socket) {
    socket.write("you have connected the server,input 'q' to quit\n");
    //将socket放入sockets集合
    sockets.push(socket);
    console.log(sockets.length + ' have connected');
    //socket监听数据
    socket.on('data', function (data) {
        //如果监听到的数据是'q',则断开socket连接
        if (data.toString().trim().toLowerCase() === 'q') {
            socket.write('you have quited the chat room\n');
            return socket.end();
        }
        //将socket传输的数据广播到其他socket
        sockets.forEach(function (otherSocket) {
            //排除掉发送数据的socket
            if (otherSocket !== socket) {
                otherSocket.write(data.toString());
            }
        })
    });
    //socket连接断开后从sockets中移除socket
    socket.on('end', function () {
        console.log('a client have quited the chat room\n');
        sockets.splice(sockets.indexOf(socket), 1);
        console.log(sockets.length + ' have connected');
    });
});

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selenium399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值