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的规则