WinError 10054 Python – jak naprawić ten irytujący błąd?
Pracujesz z sieciami w Pythonie i nagle pojawia się błąd WinError 10054? To frustrujące, ale spokojnie – to częsty problem, który da się rozwiązać! W tym artykule dowiesz się, co oznacza błąd WinError 10054 Python, skąd się bierze i jak go naprawić. Przedstawimy też praktyczne przykłady.
Co oznacza WinError 10054 Python?
Błąd WinError 10054 to komunikat zwracany przez system Windows, gdy połączenie sieciowe zostaje nagle przerwane. Występuje on w aplikacjach wykorzystujących moduł socket i oznacza, że:
- Zdalny host zerwał połączenie.
- Zostało ono zamknięte przez serwer lub klienta.
- Firewall lub antywirus mógł zablokować transmisję.
Kiedy pojawia się błąd WinError 10054?
Możesz napotkać ten błąd w różnych sytuacjach:
- Podczas pracy z serwerami TCP/IP.
- W komunikacji klient-serwer w Pythonie.
- Gdy serwer przerywa połączenie z powodu braku aktywności.
- Kiedy firewall blokuje ruch sieciowy.
WinError 10054 Python – przykłady problemu
Załóżmy, że masz prosty serwer i klienta w Pythonie:
# Serwer
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen(1)
conn, addr = server.accept()
data = conn.recv(1024) # Oczekiwanie na dane
print("Odebrano:", data.decode())
conn.close()
server.close()
# Klient
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 12345))
client.send(b'Hello, server!')
client.close()
Jeśli klient zakończy połączenie, zanim serwer zdąży odebrać dane, może pojawić się błąd WinError 10054.
Jak naprawić WinError 10054?
Oto kilka sposobów, by rozwiązać ten problem:
1. Obsługa błędu w Pythonie
Najprostszym sposobem jest użycie try-except:
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen(1)
while True:
try:
conn, addr = server.accept()
data = conn.recv(1024)
print("Odebrano:", data.decode())
except ConnectionResetError:
print("Połączenie zostało przerwane (WinError 10054).")
finally:
conn.close()
2. Sprawdzenie ustawień firewalla
Jeśli Twój program działa na zdalnym serwerze, upewnij się, że firewall nie blokuje ruchu na porcie, którego używasz.
3. Użycie keep-alive
Dodanie opcji SO_KEEPALIVE może pomóc w utrzymaniu połączenia:
server.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
Podsumowanie
Błąd WinError 10054 Python jest częstym problemem przy pracy z socketami. Na szczęście, dzięki naszym WinError 10054 Python przykładom, wiesz już, jak go rozwiązać!

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!