Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung des TCP-Server- und Client-Chat-Programms von Nodejs

Detaillierte Erläuterung des TCP-Server- und Client-Chat-Programms von Nodejs

零下一度
零下一度Original
2017-07-09 09:44:321244Durchsuche

Dieser Artikel stellt hauptsächlich die TCP-Server- und Client-Chat-Programme von Nodejs im Detail vor. Interessierte Freunde können darauf verweisen.

TCP wird für die Kommunikation zwischen Computern verwendet Ich habe ein tiefes Verständnis für die Arbeitsschritte des Clients und des Servers. Hier werde ich es basierend auf dem großartigen Buch Node.js zusammenfassen.

Das TCP-Chat-Programm muss das Netzmodul in Nodejs verwenden. Das Netzmodul ist eine Kapselung von TCP und wird zum Erstellen von TCP-Servern und -Clients verwendet.

Serverseite

Anzahl: die Anzahl der verbundenen Clients
Benutzer: ein Objekt zum Speichern von Client-Benutzer-Spitznamen, den Objektwerten sind alle Es ist der Socket des Clients. Socket ist eine Schnittstelle, die für die Kommunikation zwischen dem Server und dem Client verwendet wird.
net.createServer: wird zum Erstellen eines TCP-Servers verwendet. Die übergebene Funktion ist der Listener für das Verbindungsereignis. Das Verbindungsereignis wird ausgelöst, nachdem sich ein Client mit dem Server verbunden hat ist ein Socket, also eine Instanz von net.Socket, die sowohl lesbar als auch beschreibbar ist. conn: Dies ist der Parameter
der Callback--Funktion. Die jedem Client entsprechende Verbindung ist unterschiedlich und wird vom Server automatisch identifiziert. conn.write: sendet Daten an den Client.
Spitzname: Dies ist der Spitzname des Clients. Wenn der Spitzname nicht definiert ist, bedeutet dies, dass der Client den Spitznamen noch nicht eingegeben hat. Wenn er nicht leer ist, wurde er gespeichert bedeutet, dass die Eingabedaten eine Konversation sind und anderen auf dem Client angezeigt werden müssen.
conn.on('data',function (data){...}): wird verwendet, um Daten vom Client zu empfangen.


  /*server.js*/
  var net=require('net');
  var count=0;
  var users={};
  
  var server=net.createServer(function (conn) {
    conn.setEncoding('utf8');
    conn.write(count+' people are connected'
      +'\nplease write your nickname:');
    count++;
    var nickname;
    conn.on('data',function (data) {
      data=data.replace(/\r\n/,'');
      if(!nickname){
        if(users[data]){
          conn.write('\n nickname already used,try again:');
          return;
        }else {
          nickname=data;
          users[nickname]=conn;//每个客户端对应的conn是不一样的
          for(var i in users){
            users[i].write(nickname+' join the romm\n');
          }
        }
      }else {
        conn.write('发送者nickname: '+nickname+'\n');
        for(var i in users){
          if(i!=nickname){
            users[i].write(nickname+': '+data+'\n');
          }
        }
      }
    });
    conn.on('close',function () {//这里防止连接出错,使用close而非end
      console.log(nickname+' client disconnected\n');
      count--;
      delete users[nickname];
    });
    conn.on('error',function (err) {
      console.log('Error in connection:'+ err+'\n');
    });
  }).listen(3000,function () {
    console.log('server is listenning on 3000');
  });

Client

process.stdin.resume(): Process.stdin-Stream zum Akzeptieren der Benutzertastatur Bei der Eingabe befindet sich dieser lesbare Stream bei der Initialisierung in einem angehaltenen Zustand und die Methode „resume()“ für den Stream wird aufgerufen, um den Stream fortzusetzen.

process.stdin.on('data', function(data){…}): wird verwendet, um Tastatureingaben zu erhalten und diese mit client.write() an den Server zu senden.
Stopp: Wird verwendet, um festzustellen, ob die Verbindung zum Client normal getrennt wird.
net.createConnection: wird zum Erstellen einer Verbindung auf der Serverseite verwendet und fügt dem Verbindungsereignis automatisch einen Listener hinzu. Der Listener empfängt keine Parameter. Was zurückgegeben wird, ist „net.Socket“.


  /*client.js*/
  var net=require('net');
  var stop = false;
  process.stdin.resume(); 
  
  process.stdin.on('data', function(data){
    if(data.toString().trim().toLowerCase()==='stop'){
      stop=true;
      console.log('connection stop\n');
      client.end();
    }else{
      client.write(data);
    }
  });
  
  var client=net.createConnection(3000,function () {
    console.log('connected to server!\n');
  });
  client.on('data', function(data) {
    console.log(data.toString());//打印服务器发送的数据
  });
  client.on('error', function(err) {
    console.log('Error in connection:'+ err+'\n');
  });
  client.on('close', function() {
    if(! stop) {
      console.log('connection got closed');
    }
  });

TCP-Chat-Programm

Hier sind die Testergebnisse, die in Git ausgeführt werden und 3 Clients verbinden:

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des TCP-Server- und Client-Chat-Programms von Nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn