2017-10-17 20 views
1

Je suis novice dans NodeJS et j'ai commencé à apprendre en créant une application de conversation en ligne de commande simple. J'ai le code suivant pour le serveur et le client. La communication client-serveur est réussie, mais je ne parviens pas à capturer l'événement 'adduser' du client. S'il vous plaît, dites-moi où je me trompe.Application de conversation simple avec NodeJS

Serveur:

var net = require('net'); 

var chatServer = net.createServer(function(socket){ 
    socket.pipe(socket); 
}), 
    userName=""; 

chatServer.on('connection',function(client){ 
    console.log("ChatterBox Server\n"); 
    client.write("Welcome to ChatterBox!\n"); 
    client.on('data',function(data){ 
     console.log(""+data); 
    }); 
    client.on('adduser',function(n){ 
     console.log("UserName: "+ n); 
     userName = n; 
    }); 
}); 

chatServer.listen(2708); 

Client:

var net = require('net'); 
var client = new net.Socket(); 
client.connect(2708,'127.0.0.1'); 
client.on('connect',function(){ 
    client.emit('adduser',"UserName"); 
}); 
console.log("Client Connected!\n"); 
client.on('data',function(data){ 
    console.log(""+data); 
}); 
+0

Je pense cela répond à votre question: https://stackoverflow.com/questions/6933646/socket-emit-in-a-simple-tcp-server-written-in-nodejs –

Répondre

0

Je suppose que vous ne devez pas faire du côté client:

client.connect(2708,'127.0.0.1'); 

Il suffit d'écrire votre client comme celui-ci est suffisant.

var net = require('net'); 
var client = new net.Socket(); 

client.connect(2708, '127.0.0.1',function(){ 
    console.log("Client Connected!\n"); 
    client.emit('adduser',"UserName"); 
}); 

client.on('data',function(data){ 
    console.log(""+data); 
}); 

client.on('close', function() { 
    console.log('Connection closed'); 
}); 

Ainsi, le côté serveur:

var net = require('net'); 
var sockets = []; 
var port = 2708; 
var guestId = 0; 

var server = net.createServer(function(socket) { 
    // Increment 
    guestId++; 

    socket.nickname = "Guest" + guestId; 
    var userName = socket.nickname; 

    sockets.push(socket); 

    // Log it to the server output 
    console.log(userName + ' joined this chat.'); 

    // Welcome user to the socket 
    socket.write("Welcome to telnet chat!\n"); 

    // Broadcast to others excluding this socket 
    broadcast(userName, userName + ' joined this chat.\n'); 

    socket.on('adduser',function(n){ 
     console.log("UserName: "+ n); 
     userName = n; 
    }); 


    // When client sends data 
    socket.on('data', function(data) { 

     var message = clientName + '> ' + data.toString(); 

     broadcast(clientName, message); 

     // Log it to the server output 
     process.stdout.write(message); 
    }); 


    // When client leaves 
    socket.on('end', function() { 

     var message = clientName + ' left this chat\n'; 

     // Log it to the server output 
     process.stdout.write(message); 

     // Remove client from socket array 
     removeSocket(socket); 

     // Notify all clients 
     broadcast(clientName, message); 
    }); 


    // When socket gets errors 
    socket.on('error', function(error) { 

     console.log('Socket got problems: ', error.message); 

    }); 
}); 


// Broadcast to others, excluding the sender 
function broadcast(from, message) { 

    // If there are no sockets, then don't broadcast any messages 
    if (sockets.length === 0) { 
     process.stdout.write('Everyone left the chat'); 
     return; 
    } 

    // If there are clients remaining then broadcast message 
    sockets.forEach(function(socket, index, array){ 
     // Dont send any messages to the sender 
     if(socket.nickname === from) return; 

     socket.write(message); 

    }); 

}; 

// Remove disconnected client from sockets array 
function removeSocket(socket) { 

    sockets.splice(sockets.indexOf(socket), 1); 

}; 


// Listening for any problems with the server 
server.on('error', function(error) { 

    console.log("So we got problems!", error.message); 

}); 

// Listen for a port to telnet to 
// then in the terminal just run 'telnet localhost [port]' 
server.listen(port, function() { 

    console.log("Server listening at http://localhost:" + port); 

}); 

Donc, vous avez un objet "utilisateurs" à l'intérieur du "utilisateur" quand est connecté, appuyez sur utilisateur au tableau utilisateurs mais vous devez faire (côté serveur) sur («fermer», ... pour supprimer l'utilisateur des utilisateurs lorsque connecté est faux ... etc

+0

Merci pour votre avis à ce sujet. J'ai fait la même chose mais l'événement "adduser" émis dans le client n'est pas capturé dans le serveur pour donner un nom au client connecté. – Prashaanth

+0

@Prashaanth je pensais à socket.io et je ne sais pas si ce réseau fonctionne de manière similaire, essayez celui-ci si adduser ne fonctionne pas donc la raison est: n'est pas socket.io et la lib NET ne peut pas ajouter un nouvel émetteur d'événements , la solution passe des données et ajoute un objet avec plusieurs critères pour attraper vos données. –

+0

cela va peut-être nous donner une réponse. https://stackoverflow.com/questions/6933646/socket-emit-in-a-simple-tcp-server-written-in-nodejs – Prashaanth