python程序中 socket.error : (113 , 'No route to host ')

想使用python体验下多简单,于是写了最简单的一个C/S程序,的确实现起来很简单!

 

服务器端程序

#!/usr/bin/python
import socket
listensock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
listensock.bind(('192.168.0.172',6000))
listensock.listen(50)
while 1:
  newconnsock,address=listensock.accept()
  print 'got connected from ',address
  newconnsock.send('hello i am server,welcome to connect me')
  ra=newconnsock.recv(512)
  print ra
  newconnsock.close()
  print 'server closed the new connection'

 

客户端程序

#!/usr/bin/python
import socket
s=socket.socket()
s.connect(('192.168.0.172',6000))
data=s.recv(512)
print 'get the server data is ',data
s.send('hi,i am client,i request to connect server!/n')
print 'client sent hihi to server!/n'
s.close()
print 'client closed socket/n'

 

我在同一台机器上运行成功,但是当我使用另外一台计算机作为客户端时,每次运行客户端程序都失败,错误是:socket.error : (113 , 'No route to host '),检查发现端口没有问题,原来我的iptables开着呢,把服务器端的防火墙关闭后,连接成功,okey!

呵呵!

### CentOS 7 上 Redis 7 集群配置遇到的 'no route to host' 错误解决方案 当在 CentOS 7 上部署 Redis 7 集群并遭遇 `Error condition on socket for SYNC: No route to host` 或者类似的连接问题时,可以采取以下措施来解决问题。 #### 修改 Redis 配置文件 确保 Redis 的配置允许来自外部 IP 地址的请求。默认情况下,Redis 可能仅绑定到本地回环地址 (`127.0.0.1`),这会阻止远程客户端建立连接。应调整 `/etc/redis.conf` 文件中的 `bind` 参数设置: ```bash # 原始配置可能为 bind 127.0.0.1 # 更改为监听所有可用接口 bind 0.0.0.0 ``` 该更改使得 Redis 实例能够接受来自任何网络接口上的连接请求[^1]。 #### 检查防火墙状态 确认服务器上的防火墙不会阻挡必要的端口流量。对于 CentOS 7 来说,默认使用的防火墙管理工具是 `firewalld`. 如果存在不必要的规则,则可能导致目标主机不可达的情况发生。可以通过命令停止防火墙服务来进行测试: ```bash systemctl stop firewalld ``` 如果停用防火墙之后问题得到解决,那么应该考虑添加特定于 Redis 所需端口的安全策略而不是完全禁用防护机制。 #### 排除 Linux 内核版本因素 考虑到 Docker 容器或其他依赖底层操作系统特性的应用环境,Linux 内核版本也可能影响网络连通性。为了保证最佳兼容性和性能表现,建议使用至少 3.10 版本以上的内核。较低版本可能会引起诸如 “No route to host”的异常状况。因此,在必要时应当更新系统的内核至更高版本[^4]: ```bash uname -r # 查看当前内核版本号 yum update kernel # 更新内核包 reboot # 重启机器使新内核生效 ``` #### 测试与验证 完成上述操作后,再次尝试通过 Telnet 工具或者其他方式去检验能否成功建立起同各个节点间的 TCP 连接。例如针对某个运行有 Redis 服务实例的目标IP 和端口号执行如下指令: ```bash telnet <target_ip> <port> ``` 若一切正常则说明已经解决了之前存在的路由可达性障碍;反之还需进一步排查其他潜在原因如 DNS 解析失败、路由器ACL限制等问题[^3]。 #### 处理 Redis 主从复制场景下的特殊需求 如果是专门针对主从架构做优化的话,除了以上提到的基础层面外还需要特别关注几个方面: - **持久化选项**:合理设定 AOF (Append Only File) 或 RDB (Redis Database Backup),以防止数据丢失风险; - **安全认证**:启用密码保护功能(`requirepass`)以及 SSL/TLS 加密传输通道; - **资源隔离度**:利用 cgroups 控制组技术控制 CPU/Memory 使用率,避免单点故障扩散效应。 ```python # 设置 masterauth 密码以便 slave 同步时提供身份验证 masterauth your_password_here # 设定 requirepass 对所有客户端连接实施鉴权校验 requirepass your_password_here ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值