You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter+Socket服务端连客户端报WinError 10060超时错误求助

WinError 10060报错原因及代码修复方案

报错核心本质

WinError 10060属于连接超时错误,指客户端发出的TCP连接请求在指定时间内没有收到服务端的响应,最终触发超时。

代码中导致报错的直接问题

1. 重复调用root.mainloop(),服务端逻辑完全未执行

你把root.mainloop()写在了TCPServer类定义和实例化的前面,mainloop()是Tkinter的GUI阻塞循环,只要不关闭GUI窗口,后续的服务端初始化、启动监听、开线程的代码完全不会运行。等于只开了个GUI空窗口,服务端压根没启动,客户端自然连不上。

2. 服务端绑定的IP地址错误

你写的self.HOST = '192.0.0.1'大概率不是本地机器的有效IP:

  • 仅在本机测试的话,建议绑定127.0.0.1(本地回环地址,仅本机可访问)
  • 需要同局域网其他设备连接的话,建议绑定0.0.0.0(监听本机所有网卡的IP地址)

3. 缺少socket模块导入

代码中使用了socket相关API,但没有写import socket,运行会直接抛出模块未找到错误,服务端无法启动。

其他可能触发10060的原因

  • 防火墙拦截:Windows防火墙或第三方安全软件拦截了8080端口的TCP通信,可临时关闭防火墙测试
  • 客户端连接地址不匹配:客户端填写的连接IP/端口和服务端实际监听的不一致
  • 跨网段访问限制:客户端和服务端不在同一局域网,且没有做端口映射的情况下,公网请求无法到达内网服务端

修复后的可用代码

from tkinter import *
import _thread
import socket # 补导入socket模块

#页面代码
root = Tk()
root.title('TCP服务端')
root.geometry('640x480')

label_1 = Label(root,relief=GROOVE,text='从客户端接收的数据')
label_1.place(relx=0.1,rely=0.0,relwidth=0.4,relheight=0.1)
Operate = Text(root,relief=GROOVE)
Operate.place(relx=0.1,rely=0.1,relwidth=0.4,relheight=0.4)


Tips = Text(root,relief=GROOVE)
Tips.place(relx=0.1,rely=0.5,relwidth=0.4,relheight=0.4)
Tips.insert(END,'当前状态:\n')
Tips.configure(state=DISABLED)

class TCPServer():
    def __init__(self):
        self.HOST = '127.0.0.1' # 改成正确的绑定IP
        self.PORT = 8080
        self.BUFSIZ = 1024
        self.ADDRESS = (self.HOST,self.PORT)
        self.tcpServerSocket = socket.socket(AF_INET, SOCK_STREAM)
        self.tcpServerSocket.bind(self.ADDRESS) #IP地址和固定端口信息 
        self.tcpServerSocket.listen(5)
    def try_connect(self):
            global var
            var='服务器正在运行,等待客户端连接...\n'
            Tips.configure(state=NORMAL)
            Tips.insert(END,var)
            Tips.configure(state=DISABLED)
            while True:
                self.client_socket, self.client_address = self.tcpServerSocket.accept()
                var='客户端{}已连接!\n'.format(self.client_address)
                Tips.configure(state=NORMAL)
                Tips.insert(END,var)
                Tips.configure(state=DISABLED)
                
                while True:
                    self.data = self.client_socket.recv(self.BUFSIZ)
                    if(self.data):
                        var='接收到消息 {}({} bytes) 来自 {}\n'.format(self.data.decode('utf-8'), len(self.data), self.client_address)
                            # 返回响应数据,接受的数据不做处理即返回
                        self.client_socket.send(self.data)
                        var='发送消息 {} 至 {}\n'.format(self.data.decode('utf-8'), self.client_address)
                        Tips.configure(state=NORMAL)
                        Tips.insert(END,var)
                        Tips.configure(state=DISABLED)
                        Operate.configure(state=NORMAL)
                        Operate.insert(END,self.data)
                        Operate.configure(state=DISABLED)
                    else:
                        var='客户端 {} 已断开!\n'.format(self.client_address)
                        Tips.configure(state=NORMAL)
                        Tips.insert(END,var)
                        Tips.configure(state=DISABLED)
                        break
            # 关闭socket
            self.client_socket.close()       
            # 取消监听socket,自此拒绝响应其它客户端
            self.tcpServerSocket.close()
Server = TCPServer()

_thread.start_new_thread(Server.try_connect, ()) # 补充线程空参数,避免运行报错
root.mainloop() # 把mainloop移到最后,先启动服务端再跑GUI循环

测试注意事项

客户端连接时填写的IP要和服务端绑定IP一致,本机测试填127.0.0.1,端口填8080即可正常连接。

内容的提问来源于stack exchange,提问作者光头大魔王

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:27:01