码迷,mamicode.com
首页 > 其他好文 > 详细

使用Socket在cmd命令行聊天

时间:2017-10-21 18:59:24      阅读:730      评论:0      收藏:0      [点我收藏+]

标签:关闭   client   int   lin   令行   内容   连接服务器   lis   模块   

---恢复内容开始---

Socket:两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端就称为Socket

特性:持久链接,双向通信

首先要有服务器与客户端两端

开一个服务器server,引用node的核心模块net

const net = require("net");
const clients = [];

const server = net.createServer();server.on("connection",(client) => {

//当一个用户连接进来是,第一步先给用户一个id
//把用户存入所有用户的这个数组中
client.id = clients.length;
clients.push(client);

//设置编码集合
client.setEncoding("utf8");
//监听用户(客户端)是否给服武器发了数据
//如果发送了数据
//服务器把数据转发给其他所有用户
     client.on("data",(data) => {
          for(var i=0; i<clients.length; i++) {
               if(clients[i]){
                 clients[i].write(data)
                 }
          }
})

//监听用户是否退出群聊
//如果退出,就移除用户
    client.on("close",() =>{
          clients[client.id] = null;
    })

//监听用户是否连接是否出错
//如果出错,就移除用户
          client.on("error",() =>{
                 clients[client.id] = null;
              })
          })


server.listen("9000","127.0.0.1");

开一个客户端,用来与服务器通信,引入核心模块net和readline

const net = require("net");
const readline = require("readline");
//创建客户端
const client = new net.Socket();

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
//连接服务器
client.connect("9000","127.0.0.1");

//服务器传来数据,做监听
client.setEncoding("utf8");
client.on("data", (data) => {
               console.log(data);
 })
//client.write("ma zheng");
//监听控制台输入的内容,发送给服务器
rl.on("line",(input) => {
       if (input === "quit") {
           rl.close();    //聊天框关闭
           client.destroy(); //如果输入quit,对话终止
      }else{
          client.write(input);
   }

})

---恢复内容结束---

使用Socket在cmd命令行聊天

标签:关闭   client   int   lin   令行   内容   连接服务器   lis   模块   

原文地址:http://www.cnblogs.com/0402jing/p/7705399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!