Socket Programming: Konsep Dasar dan Implementasi Teknis

Definisi dan Mekanisme Socket

Socket programming adalah metode komunikasi antar proses (Inter-Process Communication/IPC) yang memungkinkan dua program untuk saling bertukar data, baik dalam satu mesin yang sama maupun melalui jaringan komputer. Dalam arsitektur ini, satu program bertindak sebagai Server (menunggu koneksi) dan program lainnya sebagai Client (memulai koneksi).

Komponen Utama Socket

Untuk membangun koneksi socket, sistem memerlukan kombinasi alamat IP dan nomor port. Berikut adalah tabel komponen dasar yang harus dipahami sebelum memulai implementasi:

KomponenFungsi
IP AddressIdentitas unik perangkat dalam jaringan.
PortTitik akhir komunikasi (endpoint) untuk aplikasi spesifik.
ProtocolAturan komunikasi (TCP untuk reliabilitas, UDP untuk kecepatan).
Socket DescriptorID unik yang merepresentasikan koneksi yang sedang aktif.

Alur Kerja Socket (TCP)

Proses komunikasi TCP mengikuti urutan langkah yang ketat agar data dapat terkirim dengan utuh. Berikut adalah urutan teknis yang terjadi di balik layar:

  1. Server: Melakukan socket() untuk membuat endpoint, bind() untuk mengikat port, listen() untuk menunggu koneksi, dan accept() untuk menerima permintaan.
  2. Client: Melakukan socket() dan connect() ke alamat IP serta port server.
  3. Data Transfer: Kedua pihak menggunakan send() dan recv() untuk bertukar informasi.
  4. Termination: Setelah selesai, kedua pihak memanggil close() untuk memutus koneksi secara elegan.

Contoh Implementasi Dasar (Python)

Berikut adalah contoh sederhana implementasi server yang menunggu pesan dari client menggunakan pustaka socket bawaan Python:

import socket

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

print("Menunggu koneksi...")
conn, addr = server_socket.accept()
print(f"Terhubung dengan {addr}")

data = conn.recv(1024)
print(f"Pesan diterima: {data.decode()}")
conn.close()

Troubleshooting Umum

Dalam pengembangan socket, sering terjadi kendala teknis yang umum ditemukan di lapangan:

  • Address Already in Use: Terjadi karena port masih dalam status TIME_WAIT. Gunakan opsi SO_REUSEADDR pada socket server.
  • Connection Refused: Server belum berjalan atau port yang dituju salah.
  • Timeout: Koneksi terputus di tengah jalan atau firewall memblokir port yang digunakan.