MC, 2025
Ilustracja do artykułu: WinError 10054 Python – jak naprawić ten irytujący błąd?

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!

Imię:
Treść: