2013-02-01 31 views
12

daję szansę na node.js z socket.ioNodejs & gniazdo IO: ostrzec - błąd podniesiony: Błąd: słuchać EADDRINUSE

Teraz tutaj jest mój scenariusz jestem użytkownikiem Ubuntu 12.04 i mam folderu pp pulpit

wewnątrz, że jestem putted plików serwera tj app.js

Oto treść

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); 
    }); 
}); 

teraz w tym samym folderze, mam inny plik index.html jak

<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> 

gdy próbuję uruchomić app.js useing węzeł jak

node app.js 

Dostaję błąd

warn - error raised: Error: listen EADDRINUSE 

mi przejść przez kilka doc i stwierdził, że są zajęci portu tak zrestartowałem system, ale wciąż dostaję ten sam błąd.

Proszę powiedz mi, co mogę zrobić źle.

+0

Wypróbuj inny port - prawdopodobnie '8080' jest używany przez inną aplikację. – pimvdb

+0

Naprawdę mam ten problem, nie mogę znaleźć żadnego rozwiązania. – Tarek

+0

wydaje się, że nie edytowałem portu w pliku server.js, więc przekazałem błąd, ale teraz nie mogę połączyć się z nim poprawnie. – Tarek

Odpowiedz

6

Spróbuj użyć innego portu. 8080 jest zwykle używany przez tomcat np.

Użyj netstat -a -v, aby dowiedzieć się, który port jest aktualnie używany.

+0

nadal uzyskując ten sam – masterofdestiny

+0

można wydrukować dane wyjściowe z 'netstat -a -v' lub' nmap localhost'. – Charles

+0

nmap localhost 22/TCP otwarty ssh 25/TCP otwarty SMTP 53/TCP otwarty domeny 110/TCP otwarty POP3 139/TCP otwarte NetBIOS ssn 143/TCP otwarty IMAP 445/TCP otwarte Microsoft DS 631/tcp open IPP 993/tcp open imaps 995/tcp open POP3S 3306/tcp open mysql 8080/tcp open http-proxy – masterofdestiny

1

Wydaje mi się, że twój nie łączenia się z hostem po stronie klienta:

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

masz rację, ale ten problem jest po stronie serwera, jeśli się nie mylę, – masterofdestiny

+0

zamiast 'res.end (fs.readFileSync (nazwa_domeny +" /indeks.html "));' użyj ' readFile' – ashley

1

Nie jesteś łączącego się z serwerem, to jest złe:

var iosocket = io.connect(); 

ten ma rację:

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

Również twój port 8080 jest używany na twoim serwerze przez "http-proxy", spróbuj innego portu.

1

Bardzo głupim/prostym rozwiązaniem jest upewnienie się, że nie ma otwartych wielu okien terminala. Dostałem ten błąd i zdałem sobie sprawę, że mam drugie, wcześniej istniejące połączenie, z którym uruchomiłem swoją aplikację. Po zamknięciu i ponownym uruchomieniu aplikacji błąd zniknął.

+0

Miałem Putty i WinSCP otwarte i ciągle otrzymywałem błąd EADDRINUSE; kiedy zamknąłem oba i zrestartowałem tylko Putty, byłem w stanie uruchomić węzeł-txs. – Data

0

Oto przykład dla początkujących, jak można skonfigurować NodeJS + ekspresowe + SocketIO tak, że nie masz błąd EADDRINUSE po raz drugi uruchomieniu aplikacji:

'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); 
}); 

myślę, że to jest użytecznym przykład i mam nadzieję, że pomoże to komuś, kto napotkał problem z ustawieniem tego wszystkiego.

Powiązane problemy