解决 s.connect((host, port)) TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
直接进入正题。
今天在进行一个socket编程时,遇到了如题这样的问题。

这个问题很常见,有的是爬虫方面的,五花八门的,查了一圈发现没有解决我的问题,接下来就分享下我遇到的问题和我的解决方案吧。
问题背景
环境:win10,Pycharm,python
今天在进行socket编程时,遇到上图的问题。
我需要在本地客户端与服务器端建立通信,简化后的情景如下:
服务器端程序:
# -*- coding: utf-8 -*-
import socket
hostname = socket.gethostname()
host = socket.gethostbyname(hostname)
# host = 服务器内网ip
port = 8080
# 端口
web = socket.socket()
web.bind((host, port))
web.listen(5)
print("start")
while True:
conn, addr = web.accept()
data = conn.recv(1024)
print(data)
conn.sendall(b'hello')
conn.close()
客户端程序:
# -*- coding: utf-8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "公网ip"
# host = 服务器公网ip
port = 8080
# 端口
s.connect((host, port))
send_data = input("input:")
s.send(send_data.encode())
rec_data = s.recv(1024).decode()
print("close scoket", rec_data)
s.close()
先运行服务器端程序(使用Pycharm ssh连接到服务器):
start
运行客户端程序(本地),一会儿出现:

首先查看腾讯云安全组:

该端口是开放的,一切正常。
那是什么原因呢?我在的博客中写过,Ubuntu 服务器利用Apache 2搭建一个简单的网站。在安装完Apache 2后,有一步是在UFW上允许Apache,会不会是防火墙没有开放端口呢?
ssh连接到服务器
输入:
sudo ufw status

发现Apache已经在运行中,但是服务器UFW并没有允许预期端口8080,此时,我们开放8080端口。
sudo ufw allow 8080

再次查看UFW状态:

可以看到8080端口已经开放了。
再来试试之前的程序。
服务端:

客户端:

类似的,实现多个客户端与服务端通信等等其他功能也可以相继展开了。
对于UFW,开启和关闭防火墙:
sudo ufw enable|disable
查看防火墙状态
sudo ufw status
开启和禁用端口如下:
sudo ufw allow|deny [service]
至此,我的问题解决了,标题问题出现的原因可能有很多,这里是我个人遇到我的问题,以及自己的解决方案,解决了自己的问题,对于同样的问题有可能就不适用了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器