zoukankan      html  css  js  c++  java
  • Node+Socket实现聊天室

    NodeJs的net模块提供了Socket接口,可用来构建聊天室,下面我们来一下如何实现这一功能的,分为客户端和服务端

    一、服务端

    var net = require("net");//引入node的net模块
    var chatServer = net.createServer();//创建服务器实例
    chatServer.listen(8000);//监听端口
    var clientMap = new Object();//用来保存客户端的信息
    var  i = 0;//连接用户的流水号(代替客户端的名字)
    //当客户端连接上时触发connection事件
    chatServer.on("connection",(client)=>{
    console.log("客官,您来啦!");
    client.name = ++i;//名字
        clientMap[client.name] = client;

    //对客户端发送消息的一个监听
    client.on("data",(data)=>{
    console.log("有人说:" + data);
    //广播
    broadcast(data,client);
    });
    //error
    client.on("error",(event)=>{
    console.log("eroor is:" + event);
    //结束
    client.end();
    });

    //客户端关闭
    client.on("close",(data)=>{
    //删除
    delete clientMap[client.name];
    console.log(client.name + "下线啦");
    //告诉所有的用户,某某下线啦
    broadcast(client.name + "下线啦",client);
    });
    })

    //广播机制-----android
    function broadcast(msg,client){
    for(var i in clientMap){
    clientMap[i].write(client.name + "say:" + msg +" ");
    }
    }
    二、客户端
    var net = require("net");

    var host = "127.0.0.1";
    var port = 8000;

    //创建一个socket
    var client = new net.Socket();
    //设置字符编码
    client.setEncoding = "utf-8";

    //连接服务器
    client.connect(port,host,()=>{
    client.write("您好");
    });
    // 为客户端添加“data”事件处理函数
    // data是服务器发回的数据
    client.on("data",(data)=>{
    console.log("服务器传来了:" + data);
    //继续发送消息
    sendMsg();
    });

    //加载dos窗口输入模块
    var readline = require("readline");

    var r1 = readline.createInterface({
    input:process.stdin,
    output:process.stdout
    })

    function sendMsg(){
    r1.question("请输入:",(inputStr)=>{
    client.write(inputStr + " ");
    })
    }
    三、操作方法
    打开DOS窗口,输入node xxx,首先运行服务端
    再新打开一个DOS串口,输入node xxx,运行客户端,在客户端输入要说的话,服务端就会显示说的话,再由服务端发给所有的用户

    编程间,bug魂飞烟灭
  • 相关阅读:
    Office Access 2007 的连接方法变了
    程序员的灯下黑:坚持和良好心态近乎道
    Unity浅析
    WPF设置样式的几种方式
    关于常用 软件授权 Licence说明
    WCF消息队列
    委托利用GetInvocationList处理链式委托
    WCF chatroom源码解析
    写一个Jquery字体插件
    浅谈AsyncState与AsyncDelegate使用的异同
  • 原文地址:https://www.cnblogs.com/lxqweb/p/6426451.html
Copyright © 2011-2022 走看看