Panduan Pemrograman Socket Python: Implementasi Client-Server

Dasar Komunikasi Jaringan dengan Python Socket

Pemrograman socket adalah fondasi komunikasi antar proses dalam jaringan komputer. Python menyediakan modul bawaan bernama socket yang memungkinkan pengembang untuk membuat aplikasi client-server menggunakan protokol TCP (Transmission Control Protocol) atau UDP (User Datagram Protocol). Dalam arsitektur ini, server bertindak sebagai pendengar (listener) pada port tertentu, sementara client melakukan inisiasi koneksi.

Implementasi Server Sederhana

Server harus melakukan bind pada alamat IP dan port, kemudian mendengarkan koneksi masuk. Berikut adalah contoh implementasi server TCP menggunakan Python:

import socket

# Inisialisasi socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen()

print("Menunggu koneksi...")
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)

Implementasi Client Sederhana

Client bertugas melakukan koneksi ke alamat IP dan port yang telah ditentukan oleh server untuk mengirimkan data.

import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(('127.0.0.1', 65432))
    s.sendall(b'Halo Server')
    data = s.recv(1024)

print(f"Diterima: {data.decode()}")

Tabel Perbandingan Metode Socket

MetodeFungsi
socket()Membuat objek socket baru
bind()Menghubungkan socket ke alamat dan port
listen()Mengaktifkan server untuk menerima koneksi
accept()Menerima koneksi masuk
connect()Memulai koneksi TCP ke server
send() / sendall()Mengirim data melalui socket
recv()Menerima data dari socket

Tips Troubleshooting

  • Address Already in Use: Sering terjadi jika port belum tertutup sempurna. Gunakan socket.SO_REUSEADDR untuk mengatasinya.
  • Timeout: Pastikan firewall tidak memblokir port yang digunakan (misal: 65432).
  • Encoding: Selalu ingat bahwa socket mengirim data dalam bentuk bytes, gunakan .encode() dan .decode() untuk string.