Python Socket编程:TCP客户端-服务器连接遇ConnectionRefusedError(WinError10061)
解决TCP连接错误ConnectionRefusedError: [WinError 10061]
这个错误说白了就是客户端找不到能响应的服务器,要么服务器没正常跑起来,要么代码里藏着小坑。先看看你的服务器代码里的几个关键问题:
一、你的服务器代码里的致命小问题
- bind方法参数写错了:
serverSocket.bind('',serverPort)这行不对,AF_INET类型的socket绑定必须传一个元组,格式是(主机地址, 端口号)。要是想让服务器监听所有网卡的请求,改成('', serverPort)或者('0.0.0.0', serverPort)就行。 - 格式化字符串符号错误:
print('Klienti u lidh me serverin %s me port $s' % addr)里的$s应该是%s,不然服务器一收到连接就会报错崩溃,根本没法处理请求。 - 代码没写完:最后一行
FjaliaMeShkronj...是半截代码,得补全处理逻辑,比如把收到的消息转大写再发回去之类的。 - 漏了listen()调用:TCP服务器必须调用
serverSocket.listen()才能开始监听连接请求,你原来的代码里没这一步,服务器根本不会等着接连接!
二、修正后的完整服务器代码
我帮你把这些问题都改好了,直接就能跑:
from socket import * serverPort = 1200 serverSocket = socket(AF_INET, SOCK_STREAM) # 修正bind的参数格式为元组 serverSocket.bind(('', serverPort)) # 启动监听,参数是最大等待连接数 serverSocket.listen(1) print(f'Server has started on port: {serverPort}') print('Server is ready to accept requests: ') while True: connectionSocket, addr = serverSocket.accept() # 修正格式化字符串的符号错误,用f-string更直观 print(f'Klienti u lidh me serverin {addr[0]} me port {addr[1]}') # 把收到的字节流解码成字符串 fjalia = connectionSocket.recv(1024).decode('utf-8') # 示例:把消息转成大写(你可以换成自己的业务逻辑) fjaliaMeShkronjaTeMedha = fjalia.upper() # 把处理后的消息编码成字节流发回客户端 connectionSocket.send(fjaliaMeShkronjaTeMedha.encode('utf-8')) # 处理完请求记得关闭连接 connectionSocket.close()
三、配套的客户端代码参考
客户端也得写对,不然还是连不上,给你个参考版本:
from socket import * serverName = 'localhost' # 如果服务器在别的电脑上,换成对应的IP地址 serverPort = 1200 clientSocket = socket(AF_INET, SOCK_STREAM) # 连接服务器,参数也是元组格式 clientSocket.connect((serverName, serverPort)) message = input('Jepni nje fjali: ') clientSocket.send(message.encode('utf-8')) modifiedMessage = clientSocket.recv(1024).decode('utf-8') print(f'Nga serveri mori: {modifiedMessage}') clientSocket.close()
四、如果还是报错的排查步骤
要是改完代码还出10061错误,按这几步查:
- 先启动服务器,再启动客户端:顺序搞反了的话,客户端连的时候服务器还没准备好,肯定被拒绝。
- 检查端口有没有被占用:Windows下打开命令提示符,输入
netstat -ano | findstr :1200,看看1200端口是不是被别的程序占了,是的话关掉占用的程序再重启服务器。 - 确认客户端连接的地址和端口和服务器一致:客户端的
serverName要对应服务器绑定的地址,端口必须和服务器的serverPort一模一样。要是服务器在另一台电脑,得确保两台机器在同一网络,而且服务器的防火墙允许1200端口的入站连接。
内容的提问来源于stack exchange,提问作者user9181771
相关产品推荐
相关产品推荐

