Socket programming adalah fondasi dari komunikasi jaringan antar proses yang berjalan pada komputer yang berbeda atau bahkan pada komputer yang sama. Python menyediakan modul bawaan yang sangat kuat bernama socket yang memungkinkan pengembang untuk membuat aplikasi jaringan, mulai dari server web sederhana hingga aplikasi chatting real-time.
Dalam socket programming, kita umumnya berinteraksi dengan dua peran utama: Server dan Klien. Server bertugas untuk 'mendengarkan' permintaan koneksi pada alamat dan port tertentu, sementara Klien bertugas untuk 'menghubungi' server tersebut.
Sebagian besar komunikasi yang andal menggunakan protokol Transmission Control Protocol (TCP). Proses pembuatan koneksi TCP melibatkan beberapa langkah kunci, baik di sisi server maupun klien:
Berikut adalah contoh dasar server sederhana dalam Python yang akan menerima pesan dari klien, mencetaknya, dan mengirimkan kembali (echo) pesan yang sama kepada klien.
import socket
HOST = '127.0.0.1' # Loopback address (localhost)
PORT = 65432 # Port non-privileged > 1023
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
print(f"Server mendengarkan di {HOST}:{PORT}")
conn, addr = s.accept()
with conn:
print(f"Terhubung dengan {addr}")
while True:
data = conn.recv(1024)
if not data:
break
pesan_diterima = data.decode('utf-8')
print(f"Menerima: {pesan_diterima}")
# Mengirimkan kembali (Echo)
conn.sendall(f"Server Echo: {pesan_diterima}".encode('utf-8'))
print("Koneksi ditutup.")
Klien ini akan terhubung ke server di alamat dan port yang sama, mengirimkan pesan, dan menunggu respons echo dari server.
import socket
HOST = '127.0.0.1' # Alamat server
PORT = 65432 # Port yang sama dengan server
pesan_untuk_dikirim = "Halo, ini adalah pesan uji coba socket!"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
s.connect((HOST, PORT))
print(f"Berhasil terhubung ke server pada {HOST}:{PORT}")
# Kirim data
s.sendall(pesan_untuk_dikirim.encode('utf-8'))
print(f"Mengirim: {pesan_untuk_dikirim}")
# Terima balasan
data_balasan = s.recv(1024)
print(f"Menerima balasan: {data_balasan.decode('utf-8')}")
except ConnectionRefusedError:
print("Koneksi ditolak. Pastikan server.py sedang berjalan.")
server.py terlebih dahulu di satu terminal, dan baru kemudian menjalankan client.py di terminal lain. Koneksi akan berhasil jika kedua skrip berjalan pada mesin yang sama.
Meskipun Python memiliki kerangka kerja web tingkat tinggi seperti Django dan Flask, memahami socket programming memberikan wawasan mendasar tentang bagaimana HTTP, FTP, SMTP, dan protokol jaringan lainnya bekerja di bawah lapisan abstrak tersebut. Penguasaan socket memungkinkan Anda membangun protokol kustom, membuat alat diagnostik jaringan, atau mengimplementasikan sistem komunikasi peer-to-peer (P2P) secara langsung.
Modul socket di Python juga mendukung protokol lain, seperti UDP (User Datagram Protocol) yang tidak memerlukan koneksi (connectionless) dan sering digunakan untuk aplikasi yang memprioritaskan kecepatan di atas keandalan pengiriman, seperti streaming game atau DNS lookup. Perbedaannya terletak pada penggunaan socket.SOCK_DGRAM daripada socket.SOCK_STREAM saat inisialisasi socket.
Socket programming adalah gerbang Anda menuju dunia jaringan komputer yang lebih dalam. Dengan contoh dasar di atas, Anda kini memiliki fondasi untuk menjelajahi topik yang lebih kompleks seperti konkurensi server (menggunakan threading atau asyncio) untuk menangani banyak klien secara simultan.