2013-09-29 5 views
-1

Я пытаюсь сделать клиент, как TCP сокет на Node.js, и делаю его подключение к серверу:Невозможно вызвать метод «писать» неопределенной

this.socket = new net.Socket(); 
this.socket.setEncoding('UTF8'); 
this.socket.on('data', function(data) 
{ 
    this.recvHHCPmsg(data); 
}); 

this.socket.connect(9000, '192.198.94.227', function() 
{ 
    //called when connection is created 
    var loginCmd = 'login' + wSym + user + wSym + pass; 
    console.log("Connected to HHCP server."); 
    this.socket.write(loginCmd, 'UTF8', function(){ console.log('Data sent.'); }); 
}); 

Но я получаю эту ошибку (на «this.socket.write» линия):

TypeError: Невозможно вызвать метод «писать» неопределенной

от функции, используемой при создании соединения, я могу сказать, что оно распознает хозяина и соединения. Так почему я не могу отправить данные с помощью сокета?

EDIT: Эта проблема была решена, но есть новый один ...

Okay, but I need code inside the call-back function to be able to access the object which 'owns' the socket object: 
this.socket.on('data', function(data) //'this' is referring to the 'User' object 
{ 
    this.recvHHCPmsg(data); //'this' is referring to the socket. 
    //The 'User' object has a method called 'recvHHCPmsg'. 
    //I want to call that function from within this call-back function. 
}); 

Есть ли способ сделать что-то с объектом, что гнездо принадлежит?

Это как определяется функция recvHHCPmsg():

User.prototype.recvHHCPmsg = 
function(text) 
{ 
    if (text == 'disconnect') 
    { 
     this.socket.write('disconnect'); 
     this.socket.end(); 
     this.socket.destroy(); 
    } 
}; 
+1

'this' не то, что вы думаете. – SLaks

+0

Я делаю это внутри функции, которую использует объект. – hammereditor

+0

Возможный дубликат [Javascript callbacks lose this this]] (http://stackoverflow.com/questions/10766407/javascript-callbacks-losing-this) – Quentin

ответ

0

Изменить

this.socket.write 

в

this.write 

Внутри вызова функции, текущий объект указываемого this является объект только socket. Когда я попробовал на моей локальной машине только с этим изменением, я получил

Connected to HHCP server. 
Data sent. 

EDIT:

Чтобы сделать recvHHCPmsg доступным, сделайте следующее.

Изменить

this.socket.on('data', function(data) { 
    this.recvHHCPmsg(data); 
}); 

в

var self = this; 
this.socket.on('data', function(data) { 
    self.recvHHCPmsg(data); 
}); 
+0

Спасибо, что помогли мне с этой проблемой, но у меня появился новый вопрос. Смотрите мой первый пост. Я отредактировал его. – hammereditor

+0

@hammereditor Пожалуйста, покажите, как и где определяется 'recvHHCPmsg'. – thefourtheye

+0

Хорошо, я сделал. Опять же, это в первом посте. – hammereditor

Смежные вопросы