Mengatasi Python TCP Client Server Error: Solusi Lengkap

Error pada koneksi TCP client-server di Python umumnya disebabkan oleh masalah jaringan, port yang masih terikat (port binding), atau server yang belum aktif saat client mencoba melakukan koneksi. Permasalahan paling sering muncul meliputi ConnectionRefusedError (Errno 111), TimeoutError, dan OSError: [Errno 98] Address already in use.

Tabel Diagnostik Error TCP Socket Python

Jenis Error Penyebab Utama Solusi Cepat
ConnectionRefusedError Server belum dijalankan atau port/IP tujuan salah. Jalankan script server terlebih dahulu; pastikan IP dan port sesuai.
OSError: [Errno 98] Address already in use Port masih digunakan oleh proses Python sebelumnya yang belum tertutup. Gunakan setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) atau matikan proses lama.
TimeoutError / socket.timeout Jaringan lambat, terhalang firewall, atau server tidak merespons tepat waktu. Tingkatkan batas waktu (timeout) atau periksa aturan firewall/NAT.

Contoh Implementasi Kode TCP Server yang Aman

Berikut adalah contoh kode server yang menerapkan opsi SO_REUSEADDR untuk mencegah error port bentrok:

import socket

def run_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Mencegah error 'Address already in use'
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
    host = '127.0.0.1'
    port = 65432
    
    server_socket.bind((host, port))
    server_socket.listen()
    print(f"Server mendengarkan pada {host}:{port}...")
    
    conn, addr = server_socket.accept()
    with conn:
        print(f"Terhubung dengan {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

if __name__ == '__main__':
    run_server()

Contoh Implementasi Kode TCP Client dengan Penanganan Error

Client harus dibungkus dengan blok try-except untuk menangkap kegagalan koneksi secara elegan tanpa membuat program crash:

import socket

def run_client():
    host = '127.0.0.1'
    port = 65432
    
    try:
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect((host, port))
        
        message = "Halo Server!"
        client_socket.sendall(message.encode('utf-8'))
        
        data = client_socket.recv(1024)
        print(f"Menerima dari server: {data.decode('utf-8')}")
        
    except ConnectionRefusedError:
        print("Gagal terhubung: Server tidak aktif atau menolak koneksi.")
    except socket.timeout:
        print("Koneksi waktu habis (timeout).")
    except Exception as e:
        print(f"Terjadi kesalahan tak terduga: {e}")
    finally:
        client_socket.close()

if __name__ == '__main__':
    run_client()

Langkah-Langkah Troubleshooting Lapangan

  1. Urutan Eksekusi: Selalu jalankan file server.py terlebih dahulu sebelum menjalankan client.py. Jika client dijalankan duluan, ConnectionRefusedError pasti akan muncul.
  2. Periksa Port yang Menggantung: Jika Anda mendapatkan error Address already in use, cari proses Python yang berjalan di background menggunakan perintah terminal netstat -ano | findstr 65432 (Windows) atau lsof -i :65432 (Linux/Mac), lalu hentikan proses tersebut.
  3. Pengujian Firewall: Jika menghubungkan client dan server di perangkat berbeda dalam satu jaringan lokal (LAN), pastikan Windows Defender atau firewall aktif tidak memblokir port yang digunakan.