Node.js websocket错误"错误:听EADDRNOTAVAIL错误:听EADDRNOTAVAIL"

时间:2014-10-09 11:13:54

标签: javascript node.js websocket ubuntu-server total.js

应用程序在localhost上工作正常。但是当它连接到服务器时会出现错误 我通过端口22连接服务器

这是错误

Error: listen EADDRNOTAVAIL Error: listen EADDRNOTAVAIL
at errnoException (net.js:904:11)
at Server._listen2 (net.js:1023:19)
at listen (net.js:1064:10)
at net.js:1146:9
at dns.js:72:18
at process._tickCallback (node.js:419:13)
at Function.Module.runMain (module.js:499:11)
at startup (node.js:119:16)
at node.js:906:3

任何帮助!!!

-update -

我运行netstat -tulpn | grep 22

结果:

 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      683/sshd
 tcp6       0      0 :::22                   :::*                    LISTEN      683/sshd

但我运行netstat -tulpn | grep 80

无显示。

任何Help.is这个服务器故障?

正在运行netstat -nlt

     Active Internet connections (only servers)
     Proto Recv-Q Send-Q Local Address           Foreign Address         State
     tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:5902          0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:6002            0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
     tcp6       0      0 :::22                   :::*                    LISTEN
     tcp6       0      0 ::1:631                 :::*                    LISTEN

正在运行netstat -anp | grep :80

     tcp        1      0 162.243.145.226:60728   91.189.94.25:80         CLOSE_WAIT  1726/ubuntu-geoip-p
     tcp        1      0 162.243.145.226:47842   74.125.239.148:80       CLOSE_WAIT  8104/epiphany-brows
     tcp        1      0 162.243.145.226:60727   91.189.94.25:80         CLOSE_WAIT  1417/ubuntu-geoip-p
     tcp        1      0 162.243.145.226:58818   198.41.30.199:80        CLOSE_WAIT  8104/epiphany-brows

5 个答案:

答案 0 :(得分:6)

您正在使用二手端口。您必须更改端口,否则必须终止正在侦听端口的进程。打开终端并撰写(示例):流程的lsof -i :22lsof -i :80lsof -i :8000kill PID


如何更改total.js中的收听 PORT

  1. / app / config / app / config-release / app / config-debug
  2. default-ip       : 127.0.0.1
    default-port     : 8000
    

    // For e.g. Heroku
    default-ip       : auto
    default-port     : auto
    
    1. 如果存在文件: release.js debug.js
    2. var fs = require("fs");
      var options = {};
      
      // options.ip = "127.0.0.1";
      // options.port = parseInt(process.argv[2]);
      options.port = 8000;
      
      1. 如果仅存在 index.js
      2. // for development:
        require('total.js').http('debug', { port: 8000 });
        
        // or for production:
        require('total.js').http('release', { port: 8000 });
        

        感谢和记录:http://docs.totaljs.com

答案 1 :(得分:3)

我认为您使用的是基于Unix的操作系统,如果是这种情况,那么您就无法使用1024以下的任何端口而无需sudo访问。

此外,在挖掘太深之前,请检查侦听端口是否未被任何其他进程使用。

快速修复(仅限开发):

  • sudo node file.js
  • server.listen(3000); // any number > 1024

用于生产(永远不会在具有root访问权限的生产环境中运行。)

您必须使用ip表

将侦听端口(例如:3000)映射到80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

答案 2 :(得分:1)

端口22是为ssh和众所周知的端口列表保留的,请检查http://en.wikipedia.org/wiki/Port_(computer_networking)#Common_port_numbers

我建议您在端口8000-9000上运行节点应用程序以进行开发,但您可以使用注册端口范围内的任何应用程序。

答案 3 :(得分:1)

今天刚看到这个。用户已在127.0.0.1 localhost文件中注释掉/etc/hosts,另一个网络服务正在将localhost解析为与用户关联的其他IP地址而非机。

解决方法是将此行添加到/etc/hosts

127.0.0.1 localhost

答案 4 :(得分:0)

如果仅在多次请求后才出现此错误,则可能需要检查端口范围设置并进行调整。还有TCP超时设置,例如FIN_WAIT,可以使连接打开的时间比预期的长。

sysctl -a | grep net应该显示所有网络连接设置。

sysctl -a | grep port进行端口范围设置。

sysctl -a | grep keep用于TCP等待设置。

See herehere(mac here)了解有关设置内容的更多详细信息/建议。

如果要修改设置,建议您首先将/etc/sysctl.conf复制到类似/etc/sysctl.conf.bak的位置,然后在该文件中修改设置。可以通过命令行对其进行调整,但这只是暂时的,重置它们可能会很麻烦。

您可能不想在生产中这样做。

其他文档:

https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/

https://easyengine.io/tutorials/linux/sysctl-conf/