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

socket通信方式

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

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

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

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

如上如所示,默认的放行的端口为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的规则