我试图使用另一个客户端用C编写服务器程序,例如,当我尝试通过端口2080连接时出现此错误。
connection refused
该错误的原因可能是什么?
connect()
取决于要准备使用的特定IP和端口。
我试图使用另一个客户端用C编写服务器程序,例如,当我尝试通过端口2080连接时出现此错误。
connection refused
该错误的原因可能是什么?
connect()
取决于要准备使用的特定IP和端口。
Answers:
可能有很多原因,但最常见的原因是:
该端口在目标计算机上未打开。
该端口在目标计算机上处于打开状态,但是其待处理连接的积压已满。
客户端和服务器之间的防火墙阻止了访问(也请检查本地防火墙)。
检查防火墙并确定端口已打开后,使用telnet连接到IP /端口以测试连接性。这样可以从您的应用程序中消除任何潜在的问题。
该错误表示侦听套接字的操作系统已识别入站连接请求,但选择有意拒绝该请求。
假设中间防火墙没有阻碍,只有两个原因(我知道)让OS拒绝入站连接请求。已经多次提到一个原因-连接的侦听端口未打开。
还有一个尚未提及的原因-侦听端口实际上是打开的并且正在被积极使用,但是其排队入站连接请求的积压已达到最大值,因此该端口没有空间可供入站连接请求排队时刻。服务器代码尚未足够多次调用accept()来完成清理新队列项目的可用插槽。
请稍等片刻,然后重试连接。不幸的是,无法区分“端口根本没有打开”和“端口已经打开但是现在太忙”。它们都使用相同的通用错误代码。
如果您尝试打开与另一台主机的TCP连接,并看到错误“连接被拒绝”,则表示
RST是TCP数据包上的一位,指示应重置连接。通常,这意味着其他主机已收到您的连接尝试,并且正在主动拒绝您的TCP连接,但是有时,介入的防火墙可能会阻止您的TCP SYN数据包并将TCP RST发送回给您。
请参阅https://tools.ietf.org/html/rfc793第69页:
同步状态
如果RST位置1
如果此连接是通过被动OPEN(即来自LISTEN状态)启动的,则将此连接返回LISTEN状态并返回。无需通知用户。如果此连接是在活动OPEN(即来自SYN-SENT状态)的情况下启动的,则连接被拒绝,向用户发出“连接被拒绝”的信号。无论哪种情况,都应删除重传队列上的所有段。在活动的OPEN情况下,进入CLOSED状态并删除TCB,然后返回。
连接被拒绝意味着您尝试连接的端口实际上并未打开。
因此,要么连接到错误的IP地址,要么连接到错误的端口,或者服务器正在侦听错误的端口,或者实际上未在运行。
一个常见的错误是在以网络字节顺序绑定或连接时未指定端口号...
1.检查服务器状态。
2.检查端口状态。
例如3306 netstat -nupl|grep 3306
。
3.检查防火墙。例如添加3306
vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
我的工作计算机遇到相同的问题。问题是,当您输入localhost时,它转到代理地址而不是本地地址,您应该绕过此步骤
Chrome =>设置=>更改代理设置=> LAN设置=>检查绕过代理服务器以获取本地地址。
以我为例,当该站点在我的国家/地区被封锁并且我不使用VPN时,就会发生这种情况。例如,当我尝试从被阻止的印度尼西亚访问vimeo.com时。
ping
,downforeveryoneorjustme.com显示不仅是我,而且我仍然可以通过FTP访问它。几分钟后,错误得到解决。