Klien Server Data Balasan Socket Connection

Contoh Socket Programming Python

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.

Prinsip Dasar Socket TCP/IP

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:

  1. Pembuatan Socket: Mendefinisikan jenis alamat (misalnya IPv4) dan jenis koneksi (misalnya TCP/IP).
  2. Binding (Hanya Server): Mengaitkan socket dengan alamat IP lokal dan nomor port tertentu.
  3. Listening (Hanya Server): Menempatkan server dalam mode pasif, menunggu koneksi masuk.
  4. Connecting (Hanya Klien): Klien mencari server dan meminta koneksi.
  5. Accepting (Hanya Server): Server menerima koneksi yang masuk, membuat socket baru untuk komunikasi spesifik tersebut.
  6. Sending & Receiving: Transmisi data bolak-balik.
  7. Closing: Menutup koneksi.

Contoh Sederhana: Server Echo TCP

Berikut adalah contoh dasar server sederhana dalam Python yang akan menerima pesan dari klien, mencetaknya, dan mengirimkan kembali (echo) pesan yang sama kepada klien.

Kode Server (server.py)


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.")
        

Contoh Sederhana: Klien Echo TCP

Klien ini akan terhubung ke server di alamat dan port yang sama, mengirimkan pesan, dan menunggu respons echo dari server.

Kode Klien (client.py)


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.")
        
Catatan Penting: Untuk menjalankan contoh di atas, Anda harus menjalankan 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.

Mengapa Socket Programming Penting?

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.