Nodejs&套接口io:警告 – 错误引发:错误:听EADDRINUSE

我正在尝试Node.js与socket.io

现在这里是我的情况我是Ubuntu的12.04用户,我有桌面上的文件夹PP

里面,我把服务器文件即app.js

这里是内容

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

现在在同一个文件夹中,我有另一个文件index.html

 <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 

我经历了一些文件,发现端口很忙,所以重新启动系统,但我仍然得到相同的错误。

请告诉我,我可能做错了什么。

尝试另一个端口。 8080通常由tomcat使用

使用netstat -a -v知道当前使用哪个端口。

在我看来,你没有连接到客户端的主机:

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

你没有连接到你的服务器,这是错误的:

 var iosocket = io.connect(); 

这是对的:

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

另外,您的端口8080通过“http-proxy”在您的服务器上使用,请尝试其他端口。

超傻/简单的可能性是确保你没有打开多个terminal窗口。 我得到这个错误,并意识到我有一个预先存在的连接,我已经启动了我的应用程序。 当我closures它并重新启动应用程序时,错误消失了。

以下是初学者如何设置NodeJS + Express + 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); }); 

我认为这是一个有用的例子,我希望它能帮助遇到问题的人设置这一切。