2017-10-17 3 views
1

Ich bin neu in NodeJS und begann zu lernen, indem Sie eine einfache Befehlszeile Chat-Anwendung erstellen. Ich habe den folgenden Code für Server und Client. Client-Server-Kommunikation ist erfolgreich, aber ich bin nicht in der Lage, 'adduser' Ereignis vom Client zu erfassen. Bitte sag mir, wo ich falsch liege.Simple Chat-Anwendung mit NodeJS

Server:

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); 

Auftraggeber:

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

Ich denke Dies beantwortet Ihre Frage: https://stackoverflow.com/questions/6933646/socket-emit-in-a-simple-tcp-server-written-in-nodejs –

Antwort

0

Ich denke, Sie nicht von der Client-Seite zu tun haben:

client.connect(2708,'127.0.0.1'); 

Schreiben Sie einfach Ihre Client wie dies ausreichend.

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'); 
}); 

So ist die Server-Seite:

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); 

}); 

So haben Sie ein Objekt "Benutzer" innerhalb der "user" bekommen wenn angeschlossen ist, drücken Sie Benutzer den Array Benutzer aber Sie müssen tun (Server-Seite) auf ('schließen', ... um den Benutzer von Benutzern zu entfernen, wenn die Verbindung falsch ist ... usw.

+0

Vielen Dank für Ihren Einblick zu diesem Thema. Ich habe das Gleiche gemacht, aber das "adduser" -Ereignis, das im Client ausgegeben wird, wird nicht im Server erfasst, um dem verbundenen Client einen Namen zu geben. – Prashaanth

+0

@Prashaanth ich dachte über socket.io und ich weiß nicht, ob dieses Netzwerk ähnlich funktioniert, versuchen Sie dies, wenn adduser nicht ausgeführt wird, also der Grund ist: ist nicht socket.io und die Lib NET kann nicht neue Ereignis Emitter hinzufügen , die Lösung wechselt von Daten und fügt ein Objekt mit mehreren Kriterien hinzu, um Ihre Daten abzufangen. –

+0

Dies wird uns möglicherweise eine Antwort geben. https://stackoverflow.com/questions/6933646/socket-emit-in-a-simple-tcp-server-written-in-nodejs – Prashaanth