socket通信显示连接被拒绝问题总结

socket通信方式

        通常使用的是socket通信模式为c/s模式,就是通过服务端创建连接,并绑定监听相关的端口,客户端通过连接至相应的端口,实现使用tcp的三次握手来进行可靠性连接,从而达到数据传输。如果对应的客户端和服务端在同一台服务器上,因是数据内部通信方式,可直接相连接。但是当我们的客户端和服务端分别部署在不同的服务器上,有时候会出现客户端连接的时候提示connect refuse,连接拒绝,的问题。这种情况是因为防火墙开启(*前提是服务端程序正常启动,并正常监听对应的端口*),说明服务端监听的端口没有放行,解决方法,而通过关闭防火墙,但是这并不是一种好的方法,因为毕竟防火墙为了保护服务器免予收到外部的攻击,从而导致服务瘫痪。为了解决该方法,可以将我们需要监听的端口配置在防火墙配置表里,让其放行服务监听的端口,这样客户端就能正常的连接至服务端,并开始的数据的发送接收处理。

如何将监听的端口配置防火墙配置表中,让其放行端口,如下所示:

(1)可以在/etc/sysconfig/iptables文件中配置将需要放行的端口进行配置,之后重启防火墙,这样该端口每次接收连接请求的时候就会进行放行,就不会拦截,导致连接被拒绝的问题。如图所示:

如上如所示,默认的放行的端口为22,可以将自己使用的端口添加至该文件中,之后重启防火墙命令:service iptables restart.

(2)直接通过命令行累添加

查看防火墙规则及编号:

iptables -nL --line-number

添加端口命令:

iptables -A INPUT -p tcp  -m state  --state  NEW  -m tcp --dport  端口号 -j  ACCEPT

保存执行的命令:

service iptalbes save

顺带介绍其他的几个参数的含义:

      –A 参数就看成是添加一条规则

      –p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS

      –dport 就是目标端口,当数据从外部进入服务器为目标端口

      –sport 数据从服务器出去,则为数据源端口使用 

       –j 就是指定是 ACCEPT -接收 或者 DROP 不接收

       -s 禁止某个IP的访问:

      例如: iptables  -A INPUT  -p  tcp  -s 192.168.1.1 -j DROP  表示禁止该IP访问该服务

       -D 删除某个规则

      例如: iptables -D INPUT 2  表示删除编号为2的规则、

2.  还存在一种情况是,频繁的启动服务端程序导致系统内核中的文件描述符所占用的端口,尚未被释放掉,需要等待一段时间释放改端口的占用,之后再启动方可成功启动服务。但是并不能都等待,可在编写程序的时候,设置socket地址重用,setblockopt该方法设置地址重用。

3,再试使用中必须保证c/s两端的ip和端口一致,否则依旧显示的是connection refused错误信息,该情形导致的是,客户端发送syn连接请求,因ip不匹配找不到对应的ip匹配对应的端口监听的服务端集成,连接内核会向客户端发送一个RST回应包,表示重连,表名当前的链接请求的地址不存在对应进程的服务端,客户端在接受到RST数据包,做出应答,并且抛出异常connection refused的错误信息。

 

 

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值