2016-05-14 123 views
0

我正在使用socket.io-client和socket.io在終端上製作一個小加密的聊天應用程序。客戶端能夠連接到服務器,但輸入時不會發出用戶名。socket.io-客戶端連接,但不發光

客戶:

var socket = require('socket.io-client')('http://127.0.0.1:3000'); 
socket.on('connect_error', function(){ 
console.log('Failed to establish a connection to the servers, or lost  connection'); 

return process.exit();  
    }); 
var prompt = require("prompt-sync")() 
var news = "Add news: Will be from database. " 
var username = prompt("Username>: ") 

console.log("Hold on a sec, just checking that!") 
console.log("") 
if (typeof username === "defined"){ 
socket.emit('user-name', {usr: 'username'}) 
} 


socket.on('user-name-good',function(socket){ 
console.log("Okay! Your username looks good, we just require your password") 
console.log("If you chose to have no password, please press enter with out pressing space!") 
var password = prompt("Password>: ") 
    if (typeof password !== "defined"){ 
    console.log("Please provide a password!") 
    return password = prompt("Username>: ") 
} 

socket.on('user-name-fail',function(socket){ 
console.log("Sorry, we could not find, "+username+""+"Please register on the website, or, if you have registered ") 
return process.exit() 
})  

} 
) 

服務器代碼,是基於代碼socket.io聊天例如:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
socket.on('chat message', function(msg){ 
io.emit('chat message', msg); 
}); 
}); 

http.listen(3000, function(){ 
console.log('listening on *:3000'); 
}); 

我添加了一個錯誤事件,該關閉客戶端,如果涉及的連接服務器故障,所以我知道它的連接,任何幫助表示讚賞,我已經做了這個主題的研究,並嘗試了很多其他方法,但無濟於事。

此外,連接是在您提交數據後進行的,而不是在客戶端代碼啓動時發生,可能會導致這種情況?

回答

0

如果你想發送客戶端和服務器之間的事件,你必須:

發送事件A從客戶機到服務器,服務器將監聽A事件。

如果你想事件B發送從服務器到客戶端,然後必須要監聽的事件B.

除了在你的代碼一切我沒有看到你正在聽的「聊天消息「事件在客戶端。

Socket.io基於這些所謂的「事件」。下面的代碼將'my_event'事件發送到服務器,並且傳送的數據將成爲對象{a:1}。

socket.emit('my_event', { a: 1 }); 

如果我要處理我要聽它在服務器上的此事件:

socket.on('my_event', function(data) { 
    // data is the object { a: 1 } 
    // do stuff.. 
}); 
+0

我注重的登錄,也沒怎麼去聊天消息。 – FlerrElectronics

+0

如何使用從客戶端發送到服務器的數據? (a ===「foo」){console.log(「a ===」foo「}。 – FlerrElectronics

+1

在客戶端寫下如下內容:socket.emit('eventA','foo');以及在服務器端添加:socket.on('eventA',function(data){console.log(data);});它會在服務器的控制檯上顯示'foo'字符串。如果你檢查typeof用戶名===「defined」..它永遠不會工作,因爲typeof關鍵字不會返回'defined'。提示會爲用戶名變量分配一個字符串,所以你可以簡單地檢查:if(username){// do stuff ..} – Azamantes

相關問題