[英]Node.js websocket error "Error: listen EADDRNOTAVAIL Error: listen EADDRNOTAVAIL"
應用程序在 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
任何幫助!!!
-更新-
我運行netstat -tulpn | grep 22
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
netstat -tulpn | grep 80
無顯示。
任何幫助。這是服務器故障嗎?
運行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
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
您正在使用已使用的端口。 您必須更改端口或必須終止正在偵聽端口的進程。 打開終端並寫入(示例): lsof -i :22
或lsof -i :80
或lsof -i :8000
並kill PID
進程的kill PID
。
如何更改total.js 中的監聽端口?
default-ip : 127.0.0.1
default-port : 8000
或者
// For e.g. Heroku
default-ip : auto
default-port : auto
var fs = require("fs");
var options = {};
// options.ip = "127.0.0.1";
// options.port = parseInt(process.argv[2]);
options.port = 8000;
// for development:
require('total.js').http('debug', { port: 8000 });
// or for production:
require('total.js').http('release', { port: 8000 });
感謝和文檔: http : //docs.totaljs.com
今天剛看到這個。 用戶已經注釋掉127.0.0.1 localhost
在自己的/etc/hosts
的文件,以及其他網絡服務是解決localhost
中不與該用戶的計算機相關的不同的IP地址。
解決方案是將此行添加到/etc/hosts
127.0.0.1 localhost
我認為您使用的是基於 Unix 的操作系統,如果是這種情況,那么您不能在沒有 sudo 訪問的情況下使用 1024 以下的任何端口。
此外,在深入挖掘之前,請檢查偵聽端口是否未被任何其他進程使用。
快速修復(僅用於開發):
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
端口 22 是為 ssh 保留的,在眾所周知的端口列表中,請查看http://en.wikipedia.org/wiki/Port_(computer_networking)#Common_port_numbers
我建議您在端口 8000-9000 上運行節點應用程序進行開發,但您可以使用已注冊端口范圍中的任何一個。
如果您在多次請求后才遇到此錯誤,您可能需要檢查您的端口范圍設置並進行調整。 還有 TCP 超時設置,例如 FIN_WAIT 可以使連接保持打開的時間比預期的要長。
sysctl -a | grep net
sysctl -a | grep net
應顯示所有網絡連接設置。
sysctl -a | grep port
用於端口范圍設置的sysctl -a | grep port
。
sysctl -a | grep keep
sysctl -a | grep keep
tcp 等待設置。
有關設置內容的更多詳細信息/建議, 請參見此處和此處( 此處為 mac)。
如果您要修改設置,我建議您首先將/etc/sysctl.conf
復制到/etc/sysctl.conf.bak
,然后修改該文件中的設置。 它們可以通過命令行進行調整,但這是暫時的,重置它們可能會很麻煩。
您可能不想在生產中這樣做。
附加文檔:
https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.