NodeJsに基づくLANチャットルーム

9256 ワード

1.このシステムはnodeJsに基づいて、electronはデスクトップの簡単なチャットシステム(1対1)を開発することを目的としています.2.nodeJsに基づくsocketプログラミング
構想:まずサーバーが必要で、中継サービスをして、論理的な判断をして、それによって一対のチャットの目的のクライアントがサーバに接続するだけで、一定のデータフォーマットを制定してデータを送信すればいいです.具体的なインターフェースはelectronで処理します.
サーバコード:
var net = require('net'); //   net  (  TCP SOCKET)
var PORT = 8080; //    
var server = net.createServer(); //    tcp    
var room = [];//          

//on         ,            ,               
server.on('connection', function (socket) {  //  connect  ,          ,        ,       
//         TCP         socket,           
  console.log("new connection" + socket.remoteAddress + ':' + socket.remotePort);
  socket.on('data', function (data) { // socket       ,                      socket   
    var data = JSON.parse(data.toString().trim()); //JSON.parse   json      json   【socket           /   】
   //    data     
    var from = data.from;
    var to = data.to;
    var msg = data.msg;
 //           json   ,    1 1  
    var singelRoom = {
      "name1": from,
      "name1S": socket,
      "name2": to
    }
 //                    json  
    if (room.length == 0) {
      room.push(singelRoom);
    }
    var flag = 0;
//          
    for (var i in room) {
//                     
      if ((room[i].name1 == from && room[i].name2 == to) || (room[i].name1 == to && room[i].name2 == from)) {
        flag = 1;
    //        socket
        if(room[i].name1 == from){
          room[i].name1S = socket;
        }
        if(room[i].name2 == from){
          room[i].name2S = socket;
        }
//      socket        json               socket
        if (room[i].name1S == socket) {
          if (room[i].name2S != null) {
            var toSocket = room[i].name2S;
            toSocket.write(msg);
          } else {
             //  socket           data  ,        socket  (               ,       )
            socket.write("      ");
          }
        } else {
          room[i].name2S = socket;
          if (room[i].name1S != null) {
            var toSocket = room[i].name1S;         
            toSocket.write(msg);
          } else {
            socket.write("      ");
          }
        }
      }
    }
    if (flag == 0) {
      //console.log("first");
      room.push(singelRoom);
      //console.log(room.length);
      socket.write("      ");
    }
  });

//      close  (   )
  socket.on('close', function () {
    //          socket       
    if(socket!=null){
      for (var i in room) {
        if(room[i].name1S==socket){
          room[i].name1S=null;
        }
        else if(room[i].name2S==socket){
          room[i].name2S=null;
        }
        else{
          break;
        }
      }
    }
    console.log('A client closed');
  });

//  socket  ,   
  socket.on('error',(err)=>{ 
    console.log("    !"+err);
  });
});

server.on('error', function (err) {
  console.log('server error:', err.message);
});

server.on('close', function () {
  console.log('server closed');
});
//        0.0.0.0    8080
server.listen(PORT, '0.0.0.0');
クライアント:ページ(index):[ここで使うelectronはindex]と関連するjsだけです.具体的なmain.jsの知識はelectron関連の文書をご覧ください.]
 


  
     
  
  


  

...

by / (echoun)