2012-04-17 18 views
1

ホームネットワークにUbuntu 10.04サーバーをセットアップしました。私はそれにランプサーバー、NodeJsとSocket.ioをインストールしました。それはうまくいくようですが、クライアントからサーバに接続できません。私は、クライアントファイルを格納する場所やIPアドレスとポートをどのようにコードに入れるべきかのポイントを見逃していると思います。NodeJS + Socket.io:クライアントはホームネットワーク内のUbuntuサーバーに接続しません

私はDavid Walsh(http://davidwalsh.name/websocket)の例を使用しています。私のIPアドレスは192.168.1.113です。クライアントに私はapp.js

ノードがWELとしてインストールされている場所である

は/ usr/local/binに

を格納します。

Serverのコード私がノードを使用してサーバを起動し、ブラウザ(http://192.168.1.113:8000)私が見るにアドレスを入力して「こんにちはソケット恋人!」

// Require HTTP module (to start server) and Socket.IO 
var http = require('http'), io = require('socket.io'); 

// Start the server at port 8000 
var server = http.createServer(function(req, res){ 

// Send HTML headers and message 
res.writeHead(200,{ 'Content-Type': 'text/html' }); 
res.end('<h1>Hello Socket Lover!</h1>'); 
}); 
server.listen(8000); 

// Create a Socket.IO instance, passing it our server 
var socket = io.listen(server); 

// Add a connect listener 
socket.on('connection', function(client){ 

// Success! Now listen to messages to be received 
client.on('message',function(event){ 
console.log('Received message from client!',event); 
    }); 
client.on('disconnect',function(){ 
clearInterval(interval); 
console.log('Server has disconnected'); 
}); 

}); 

だから私はこれがうまく動作すると思います。

私は私のLAMPサーバーのホームフォルダがどこにあるかである

の/ var/WWW

の私のクライアントファイル(client.html)を格納します。私は、ブラウザでこのファイルを開くとClient.html

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 

<script src="http://cdn.socket.io/stable/socket.io.js"></script> 

<script> 
// Create SocketIO instance, connect 
var socket = new io.Socket('http://192.168.1.113',{ 
    port: 8000 
}); 
socket.connect(); 

// Add a connect listener 
socket.on('connect',function() { 
    console.log('Client has connected to the server!'); 
}); 
// Add a connect listener 
socket.on('message',function(data) { 
    console.log('Received a message from the server!',data); 
}); 
// Add a disconnect listener 
socket.on('disconnect',function() { 
    console.log('The client has disconnected!'); 
}); 

// Sends a message to the server via sockets 
function sendMessageToServer(message) { 
    socket.send(message); 
} 

</body> 
</html> 

は今(http://192.168.1.113/client.html)何も起こりません。私は自分のUbuntuサーバーや他のログに接続がないことを確認し、ブラウザにはメッセージがありません。

私は間違っていますか?私は何時間も試みましたが、あらゆる種類のものを変えましたが、結果はまだありません。

+0

は、あなたがそれに接続を行うことができるように、あなたのUbuntuのサーバからのポート8000​​を開いたことがありますか? – pmavik

+0

ありがとうございます。私はufwを使って開閉口を試しました。ポートを閉じると、「Hello Socket Lovers」というメッセージは表示されません。私は再びそれを開くと、それはポートの問題だとは思わないので、メッセージを表示します。 –

+0

というタグがclient.htmlファイルにありません。私はそれも追加しましたが、結果はありません。 –

答えて

2

pmavik(コメントを参照)の助けを借りて私の質問に答えます。

私が知りませんでしたのは、クライアントファイルを適切に提供する方法(index.html)でした。私はwww.socket.ioの例をコピーし、正しいip-addressとportを追加して接続しました。

サーバファイル(app.js)とクライアントファイル(index.html)は、Nodeがインストールされているディレクトリにある必要があります。 Node-serverはクライアントファイルをブラウザに送信するので、クライアントファイルを/ var/wwwディレクトリに置く必要はありません。ここでは、Webサイトの「通常の」ファイルがあります。

app.js

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(8000); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
     } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.htmlを

<html> 
<head></head> 
<body> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://192.168.1.113:8000'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
</body> 
</html> 
+0

私は、index.htmlファイルを/ var/wwwディレクトリに格納することが可能であることを発見しました。 socket.io.jsのソースは、である必要があります。それから、すべてがうまくいくはずです。 index.htmlファイルをもう送信する必要はありません。 –

+0

あなたはこれが走っていると聞いてよかった! – pmavik

関連する問題