2015-03-17 14 views
7

College'da Node.js çalışıyorum ve ilk defa bu tür bir programlama dilini öğreniyorum. Sohbet sunucusu girişimde bazı hatalar var. Bir istemciyi sunucuya bağlamaya çalıştığımda, bağlantı hemen kapanır ve 'Geçersiz olmayan dizge/arabellek yığını' hatası görüntülenir. Bazı ekran görüntüleri yüklerim ve neyin yanlış olduğunu kontrol edebilirsiniz, çünkü bir süredir düşünüyorum ve herhangi bir çözüm bulamıyorum. JavaScriptgeçersiz olmayan dize/tampon öbek Node.js

Click here to see my Git bash

Kodum:

var net = require('net'); 
var s = require 
var sockets = []; 
var nombres = []; 
var nombresUsados = []; 
console.log("Se ha iniciado el sevidor"); 

var server = net.createServer(function(socket){ 
    socket.push(socket); 
    nombres.push("Cliente:" + sockets.indexOf(socket)); 
    nombresUsados.push("Cliente:" + socket.indexOf(socket)); 


    console.log("Cliente aceptado, nick:" + nombres[sockets.indexOf(socket)]); 
     socket.write("Bienvenido" + nombres[sockets.indexOf(socket)]+ "\n"); 

    ![enter image description here][2]socket.on('data', function(d){ 

var entrada = d.toString(); 
var UsuarioUnico = entrada.match(/^msg/); 
var cambiarNick = entrada.match(/^nick/); 
var quit = entrada.match(/^quit/); 
if(cambiarNick == "nick"){ 
var repetido = 0; 
var nombresSinNick = entrada.replace(cambiarNick, ''); 
for(var i = nombres.length-1; i<=0; i--){ 
      if(nombresSinNick.substring(0,nombres[i].toString().length) == nombres[i].toString()){ 
       socket.write("KO, escoja otro nombre\n") 
       repetido = 1; 

     } 


}; 



if(repetido == 0){ 
    nombres[sockets.indexOf(socket)] == nombresSinNick.trim(); 
    process.on('uncaughtException', function(err){ 

    socket.write("KO\n"); 

    }); 

     socket.write("OK. " + nombres[sockets.indexOf(socket)] + "\n"); 
     console.log(nombresUsados[sockets.indexOf(socket)]) + "su nombre ha sido cambiado por:" + nombres[sockets.indexOf(socket)]; 
     nombresUsados[sockets.indexOf(socket)] = nombresSinNick.trim(); 

    } 


    } 

    else if (UsuarioUnico = "msg"){ 
    var nombresSinMsg = entrada.replace(UsuarioUnico, ''); 
     var encontrado = 0; 
     for(var i = nombres.length-1; i<=0; i--){ 

     if(nombresSinMsg.substring(0,nombres[i].toString().length) == nombres[i].toString()){ 
      var mensaje = nombresSinMsg.replace(nombres[i], ''); 

     } 


    }; 


socket.on('end', function() {   // CALLBACK: desconexión de cliente 
    if(quit == 'quit'){ 
     var i = nombres[sockets.indexOf(socket)]; 
     sockets.splice(i, 1); 
     console.log("Ha salido el usuario:" + nombres[sockets.indexOf(socket)]); 
    } 


    }); 

} 



}); 

}); 

server.listen(9000); 

cevap

5

Sorunun hattı socket.push(socket) olduğunu düşünüyorum. Muhtemelen sockets.push(socket)'u kastediyorsunuz. Şu an ne yapıyorsunuz, soket örneğini, hata dediği gibi, bir dizge veya arabellek olmadığı için başarısız olan soket akışına itmeye çalışıyor.

+0

teşekkürler, bu hataydı. –

+0

Merhaba @PabloMateos, bu ya da herhangi bir cevap sorunuzun çözülüp çözülmediğine karar verirseniz, lütfen [onaylama] 'yı (http://meta.stackexchange.com/q/5234/179419) onay işaretini tıklayın. Bu, bir çözüm bulduğunuz ve hem yanıtlayıcıya hem de kendinize bir takım saygınlık kazandıran daha geniş bir topluluğa işaret eder. Bunu yapmak için bir zorunluluk yoktur. –