Home  >  Article  >  Web Front-end  >  Detailed explanation of Nodejs TCP server and client chat program

Detailed explanation of Nodejs TCP server and client chat program

零下一度
零下一度Original
2017-07-09 09:44:321222browse

This article mainly introduces the TCP server and client chat programs of Nodejs in detail. It has certain reference value. Interested friends can refer to it

TCP is used for computers By writing the code to communicate between the client and the server, I have a deep understanding of the working steps of the server and the client. Here I will summarize it based on the great book Node.js.

TCP chat program needs to use the net module in Nodejs. The net module is an encapsulation of TCP and is used to create TCP servers and clients.

Server side

count: the number of connected clients;
users: an object used to store client user nicknames, the object values ​​​​are It is the Socket of the client. Socket is an interface used for communication between the server and the client.
net.createServer: is used to create a TCP server. The function passed is the listener of connection event. The connection event is triggered after a client connects to the server. The parameter conn passed in is a socket. , that is, an instance of net.Socket, which is both readable and writable.
conn: It is the parameter of the callback function. The conn corresponding to each client is different, and the server will automatically identify it.
conn.write: is to send data to the client.
nickname: It is the nickname of the client. When nickname is undefined, it means that the client has not entered the nickname and needs to enter the nickname for verification. If it is not empty, it has been stored. It means that the input data is a conversation and needs to be displayed in other places. on the client.
conn.on('data',function (data){...}): is used to receive data from the client.


  /*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 to accept the user's keyboard Input, this readable stream is in a paused state when initialized, and the resume() method on the stream is called to resume the stream.
process.stdin.on('data', function(data){…}): is used to obtain keyboard input and send it to the server using client.write().
stop: Used to determine whether the client is disconnected normally.
net.createConnection: is used to create a connection on the server side and automatically add a listener to the connect event. The listener does not receive parameters. What is returned is '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 program

Here is the test result of running in git and connecting 3 clients:

The above is the detailed content of Detailed explanation of Nodejs TCP server and client chat program. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn