CentOS 7环境下socket编程出现connection refuse的情况及解决办法

不知道大家有没有在centos7的环境下编写socket程序的时候出现connection refuse这种情况?

以下是出现这个情况的一种原因和解决办法:

问题产生的原因

首先,Connection refused信息是通过strerror(errno)输出的,strerror()在<string.h>中,errno在<errno.h>中。

对于服务端:服务端中,如果端口设定是通过htonl(xxxx)。事实上,sockaddr_in.sin_port为短整型,占16位;且CentOS7系统采用的字节序为小端字节序。因此,htonl(xxxx)的实际结果为0而非xxxx的网络字节序。由于端口的实际值为0,这会导致当服务端调用函数listen时,内核会为服务端选择一个临时端口,这个临时端口通常与我们所指定的端口并不相同。

对于客户端:事实上,客户端所请求的端口号为0(保留端口)。当客户端在调用函数connect时,服务器端在客户端所请求的端口上没有服务在等待连接,所以connect最终出错返回,出错的原因正如我们所看到的:Connection refused。

解决办法

将htonl(xxxx)替换成hons(xxxx),分别实施于服务器与客户端。

总结

引起Connection refused的可能原因:服务端在客户端所请求的端口上没有服务在等待连接。

也许是服务端根本没有启动;也许是服务端启动成功了,但客户端所请求的端口与服务端正在监听的端口不一致(客户端所请求的端口并不一定与我们所指定的一致,服务端正在监听的端口也并不一定与我们所指定的一致,这正是本文所讨论的内容)。当然,不排除还存在其他情况会导致此错误。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9号信箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值