2015-12-04 96 views
2

我正在構建Socket.IO的示例聊天項目(有一些修改),我一直試圖讓人們連接localhost:3000127.0.0.1:3000,但都沒有工作。我錯過了什麼嗎? (如果有一個公然明顯的問題,對不起,我吸與聯網。)通過LAN託管Socket.io服務器

index.js:

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

var online=0; 
var prt=process.argv[2]===undefined?3000:process.argv[2]; 

process.stdin.on('data',function(){ 
    var str=String(process.stdin.read()); 
    if(str.search("!quit")){ 
     io.emit('chat message','Console: stopping server.'); 
     process.exit(); 
    } 
}); 

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

io.on('connection',function(socket){ 
    online++; 
    console.log(chalk.green('joined |',chalk.cyan(online),'online')); 

    socket.on('chat message',function(msg){ 
     io.emit('chat message',msg); 
     console.log(chalk.magenta('message |',msg)); 
    }); 

    socket.on('disconnect',function(){ 
     online--; 
     console.log(chalk.red('left |',chalk.cyan(online),'online')); 
    }); 
}); 

http.listen(prt,function(){ 
    console.log(chalk.yellow('SIOChat listening on',chalk.cyan(prt))); 
}); 

的index.html(爲便於閱讀,省略CSS):

<html> 
    <head> 
     <title>SIOChat</title> 
    </head> 
    <body> 
     <ul id='messages'></ul> 
     <form action=''> 
      <input id='m' autocomplete='off'/><button>Send</button> 
     </form> 
     <script src='https://cdn.socket.io/socket.io-1.2.0.js'></script> 
     <script src='http://code.jquery.com/jquery-1.11.1.js'></script> 
     <script> 
      var socket=io(); 

      var name=prompt('Enter a nickname','Guest'); 

      $('form').submit(function(){ 
       socket.emit('chat message',name+': '+$('#m').val()); 
       $('#m').val(''); 
       return false; 
      }); 

      socket.on('chat message',function(msg){ 
       $('#messages').append($('<li>').text(msg)); 
      }); 
     </script> 
    </body> 
</html> 

回答

5

localhost是您的機器的名稱。如果網絡上的另一臺機器試圖連接到localhost,他們將連接到自己的機器。同樣,127.0.0.1是所謂的回送地址,並告訴套接字直接連接到您自己的機器(localhost是在大多數情況下實際上解析爲127.0.0.1IP地址的主機名)。

網絡上的其他機器需要通過IP地址連接到您的機器。

您可以在Linux/OSX上的命令提示符下(在Windows上)或ifconfig上輸入ipconfig來查找您的IP地址。

例如,如果您的IP地址爲192.168.1.100,那麼其他的機器需要使用一個地址連接到你的電腦像192.168.1.100:3000

+2

帝國時代和LAN的Minecraft各方很快教你這個原則。 :) – TheHansinator