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

2019-08-22  本文已影响0人  starmier

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

————————————————
版权声明:本文为CSDN博主「一颗简单的心」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26105397/article/details/82747401

上一篇下一篇

猜你喜欢

热点阅读