2013-02-01 78 views
12

我給一個嘗試的Node.js與socket.io和的NodeJS插座IO:警告 - 錯誤提出:錯誤:聽EADDRINUSE

現在,這裏是我的情況我是Ubuntu的12.04用戶,我對文件夾頁桌面

裏面,我很推杆服務器文件即app.js

這裏是在同一個文件夾中我還有一個index.html文件,如內容

var fs = require('fs') 
    , http = require('http') 
    , socketio = require('socket.io'); 

var server = http.createServer(function(req, res) { 
    res.writeHead(200, { 'Content-type': 'text/html'}); 
    res.end(fs.readFileSync(__dirname + '/index.html')); 
}).listen(8080, function() { 
    console.log('Listening at: http://localhost:8080'); 
}); 

socketio.listen(server).on('connection', function (socket) { 
    socket.on('message', function (msg) { 
     console.log('Message Received: ', msg); 
     socket.broadcast.emit('message', msg); 
    }); 
}); 

現在

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     $(function(){ 
      var iosocket = io.connect(); 

      iosocket.on('connect', function() { 
       $('#incomingChatMessages').append($('<li>Connected</li>')); 

       iosocket.on('message', function(message) { 
        $('#incomingChatMessages').append($('<li></li>').text(message)); 
       }); 
       iosocket.on('disconnect', function() { 
        $('#incomingChatMessages').append('<li>Disconnected</li>'); 
       }); 
      }); 

      $('#outgoingChatMessage').keypress(function(event) { 
       if(event.which == 13) { 
        event.preventDefault(); 
        iosocket.send($('#outgoingChatMessage').val()); 
        $('#incomingChatMessages').append($('<li></li>').text($('#outgoingChatMessage').val())); 
        $('#outgoingChatMessage').val(''); 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
Incoming Chat: <ul id="incomingChatMessages"></ul> 


<input type="text" id="outgoingChatMessage"> 
</body> 
當我試圖運行app.js期運用節點像

node app.js 

我收到錯誤

warn - error raised: Error: listen EADDRINUSE 

我通過一些文檔,發現端口都很忙

所以重新啓動系統,但仍然收到相同的錯誤。

請告訴我我做錯了什麼。

+0

嘗試另一個端口 - 可能'8080'被其他應用程序使用。 – pimvdb

+0

我真的有這個問題,我找不到任何解決方案。 – Tarek

+0

它似乎沒有編輯server.js文件中的端口,所以我通過了該錯誤,但現在無法正確連接。 – Tarek

回答

6

嘗試另一個端口。 8080通常由tomcat使用,例如使用netstat -a -v來知道當前使用哪個端口。

+0

仍然相同 – masterofdestiny

+0

您可以打印'netstat -a -v'或'nmap localhost'的輸出。 – Charles

+0

NMAP本地主機22/TCP開放SSH 25/TCP開放SMTP 53/TCP開放域 110/TCP開放POP3 139/TCP開放的NetBIOS-SSN 143/TCP開放IMAP 445/TCP打開Microsoft-DS 631/tcp打開ipp 993/tcp打開imaps 995/tcp打開pop3s 3306/tcp打開mysql 8080/tcp打開http-proxy – masterofdestiny

1

在我看來,你沒有連接到客戶端主機:

var iosocket = io.connect('http://localhost:8080'); 
+0

你是正確的,但這個問題是從服務器端,如果我沒看錯的 – masterofdestiny

+0

代替'res.end(fs.readFileSync(__目錄名稱+「/index.html」));''使用readFile' – ashley

1

您沒有連接到您的服務器,這是錯誤的:

var iosocket = io.connect(); 

這是正確的:

var iosocket = io.connect('http://localhost:8080'); 

另外,您的端口8080通過「http-proxy」在您的服務器上使用,請嘗試其他端口。

1

超愚蠢/簡單的可能性是確保您沒有打開多個終端窗口。我得到了這個錯誤,並意識到我有第二個預先存在的連接,我啓動了我的應用程序。當我關閉它並重新啓動應用程序時,錯誤消失了。

+0

我有膩子和WinSCP打開並不斷得到EADDRINUSE錯誤;當我關閉並重新啓動膩子時,我就能夠啓動節點 - txs。 – Data

0

這裏是你如何設置的NodeJS +快速+ SocketIO讓你沒有第二次你開始你的應用程序EADDRINUSE錯誤初學者一個例子:

'use strict'; 

// Init 
var http = require('http'); 
var express = require('express'); 
var socketIO = require('socket.io'); 
var cors = require('cors'); 

// Create Server app 
var app = express(); 
var server = http.createServer(app); 
var io = socketIO(server); 

// Socket.io settings 
io.set('browser client minification', true); 
io.set('browser client etag', true); 
io.set('browser client gzip', true); 
io.set('browser client expires', true); 

// Starting Express server 
server.listen(serverPort, function() { 
    console.log(chalk.green('Server is running on localhost:' + serverPort + '...')); 
}); 

// Middleware 
app.use(cors()); 

// Routes 
app.get('/', function(req, res) { 
    res.send("Hello world!"); 
    console.log("Root visited!"); 
    // Broadcast socketIO message inside Express 
    io.emit('new_message', "Hello world!"); 
}); 

// Socket.io 
var connections = []; 
var title = "Untitled"; 

io.sockets.on('connection', (socket) => { 

    socket.once('disconnect',() => { 
     connections.splice(connections.indexOf(socket), 1); 
     socket.disconnect(); 
     console.log('Disconnected: %s. Remained: %s.', socket.id, connections.length) 
    }); 

    // ... 

    connections.push(socket); 
    console.log('Connected: %s. Total: %s', socket.id, connections.length); 
}); 

我覺得這是一個有用的例如,我希望它能幫助遇到問題的人設置這一切。