SOCKET PROGRAMMING – TCP & UDP dengan Python

1. Tujuan Praktikum

Setelah mengikuti praktikum ini, mahasiswa mampu:

  1. Memahami konsep dasar komunikasi berbasis socket.
  2. Membedakan cara kerja protokol TCP dan UDP.
  3. Membuat program TCP Client–Server menggunakan Python.
  4. Membuat program UDP Client–Server menggunakan Python.
  5. Menguji proses pengiriman dan penerimaan data antar perangkat.
  6. Menganalisis kelebihan dan kekurangan TCP vs UDP pada IoT.

2. Teori Dasar

Perbandingan socket programming TCP dan UDP

2.1 Apa itu Socket?

Socket adalah antarmuka yang memungkinkan dua program berkomunikasi melalui jaringan (LAN/WiFi/Internet).

2.2 TCP (Transmission Control Protocol)

  • Connection-oriented (membangun koneksi dulu)
  • Reliable (ada ACK, retransmit)
  • Urutan data terjaga
  • Cocok untuk data penting: sensor, file, login

Format:

Client → Connect → Send → Receive → Close

2.3 UDP (User Datagram Protocol)

  • Connectionless (tanpa koneksi)
  • Tidak reliable (bisa hilang)
  • Lebih cepat, rendah latency
  • Cocok untuk streaming, video, data cepat IoT

Format:

Send langsung → Tidak menunggu balasan

3. Alat & Bahan

  • Laptop dengan Python 3.x
  • Text Editor (VSCode / Notepad++)
  • Dua terminal (untuk server & client)
  • Jaringan LAN/WiFi (opsional untuk multi-device)

4. Praktikum TCP

4.1 Program TCP Server (server_tcp.py)

import socket




HOST = "0.0.0.0"

PORT = 5000




server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((HOST, PORT))

server.listen()




print("TCP Server berjalan di port", PORT)




conn, addr = server.accept()

print("Terhubung dengan:", addr)




while True:

    data = conn.recv(1024).decode()

    if not data:

        break

    print("Client:", data)

    conn.sendall(("Server menerima: " + data).encode())




conn.close()

server.close()

4.2 Program TCP Client (client_tcp.py)

import socket




HOST = "127.0.0.1"  # ganti dengan IP server jika beda device

PORT = 5000




client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.connect((HOST, PORT))




while True:

    msg = input("Ketik pesan: ")

    client.sendall(msg.encode())

    response = client.recv(1024).decode()

    print("Server:", response)

4.3 Langkah Uji Coba TCP

  • Buka terminal 1 → jalankan server
python server_tcp.py
  • Buka terminal 2 → jalankan client
python client_tcp.py
  1. Kirim pesan dari client → lihat response server
  2. Uji koneksi antar laptop (ubah IP server)
  3. Analisis:
    • Latency
    • Apakah pesan selalu sampai?
    • Apa beda jika koneksi terputus?

5. Praktikum UDP

5.1 Program UDP Server (server_udp.py)

import socket




HOST = "0.0.0.0"

PORT = 6000




server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server.bind((HOST, PORT))




print("UDP Server berjalan di port", PORT)




while True:

    data, addr = server.recvfrom(1024)

    print("Dari", addr, ":", data.decode())

    server.sendto(("Server menerima: " + data.decode()).encode(), addr)

5.2 Program UDP Client (client_udp.py)

import socket




HOST = "127.0.0.1"  # IP server

PORT = 6000




client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)




while True:

    msg = input("Ketik pesan: ")

    client.sendto(msg.encode(), (HOST, PORT))

    data, _ = client.recvfrom(1024)

    print("Server:", data.decode())

5.3 Langkah Uji Coba UDP

  1. Jalankan server UDP
  2. Jalankan client UDP
  3. Kirim pesan dan perhatikan:
    • Tidak ada koneksi (langsung kirim data)
    • Latency lebih rendah
    • Jika server off → pesan hilang (tidak ada error)

6. Tabel Perbandingan TCP vs UDP

ParameterTCPUDP
KoneksiYaTidak
ReliabilitySangat tinggiRendah
KecepatanLebih lambatSangat cepat
Cocok untukSensor penting, IoT serverStreaming, broadcast, sensor cepat
Urutan dataTerjaminTidak terjamin
OverheadTinggiRendah

7. Tugas Praktikum

  1. Modifikasi server TCP untuk menerima beberapa client (multi-threaded).
  2. Buat server UDP yang mengirim data broadcast ke banyak client.
  3. Bandingkan performa TCP vs UDP untuk mengirim 1000 data sensor.
  4. Buat grafik latency penggunaan TCP dan UDP.

Pembahasan Tugas 1: TCP Server Multi-Client

Server pada praktikum di atas hanya melayani satu client. Dengan threading, setiap client mendapat thread sendiri:

import socket
import threading

HOST, PORT = "0.0.0.0", 5000

def layani(conn, addr):
    print("Terhubung:", addr)
    with conn:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(b"Server menerima: " + data)
    print("Terputus:", addr)

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((HOST, PORT))
server.listen()
print("TCP server multi-client di port", PORT)

while True:
    conn, addr = server.accept()
    threading.Thread(target=layani, args=(conn, addr), daemon=True).start()

SO_REUSEADDR mencegah error Address already in use saat server dijalankan ulang dengan cepat.

Pembahasan Tugas 2: UDP Broadcast

import socket, time

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

while True:
    s.sendto(b"suhu=28.5", ("255.255.255.255", 6000))
    time.sleep(1)

Semua perangkat di jaringan lokal yang mendengarkan UDP port 6000 akan menerima pesan ini. Broadcast tidak melewati router, sehingga hanya berlaku di satu subnet.

ESP32 Mengirim Data Sensor ke Server Python

Server TCP Python di atas bisa langsung menerima data dari ESP32 sebagai client:

#include <WiFi.h>

const char* ssid = "NAMA_WIFI";
const char* pass = "PASSWORD";
const char* serverIP = "192.168.1.10";   // IP laptop yang menjalankan server
const uint16_t serverPort = 5000;

WiFiClient client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (!client.connected()) client.connect(serverIP, serverPort);
  if (client.connected()) {
    client.print("adc=");
    client.println(analogRead(34));
    String balasan = client.readStringUntil('\n');
    Serial.println(balasan);
  }
  delay(2000);
}

Timeout dan Penanganan Error

Tanpa timeout, recv() dan recvfrom() menunggu selamanya. Pada client UDP, jika server mati, program akan macet. Tambahkan:

client.settimeout(2)          # detik
try:
    data, _ = client.recvfrom(1024)
except socket.timeout:
    print("Tidak ada balasan dari server")

Troubleshooting

Pesan errorPenyebabSolusi
ConnectionRefusedErrorServer belum berjalan atau port salahJalankan server terlebih dahulu, cek nomor port
TimeoutError / tidak tersambung antar-laptopFirewall Windows memblokir portIzinkan Python di Windows Defender Firewall untuk jaringan Private
OSError: Address already in usePort masih dipakai proses lamaTutup proses lama atau gunakan SO_REUSEADDR
Pesan terpotong atau tergabung (TCP)TCP adalah aliran byte, bukan paketGunakan penanda akhir pesan (mis. \n) atau awali pesan dengan panjang data

Konsep yang sama dipakai protokol IoT seperti Modbus TCP (port 502) dan MQTT (port 1883), yang keduanya berjalan di atas TCP.

8. Laporan Praktikum (Format)

  1. Judul & tujuan
  2. Dasar teori TCP/UDP
  3. Kode program
  4. Hasil uji coba (screenshot)
  5. Analisis perbedaan TCP vs UDP
  6. Kesimpulan
  7. Daftar pustaka

 

📌 Baca juga: RPC client-server

Baca juga: Framework Belajar Jaringan Komputer untuk Pemula hingga Mahir untuk memahami roadmap lengkap belajar jaringan komputer dari dasar hingga mahir.

Related Articles

Tinggalkan Balasan

Chat Langsung dengan Kami
Staff bisaioti 1 — +62 823-3306-4821 E-Course, Offline Course, Hardware & Teknis IoT/OT Staff bisaioti 2 — +62 823-3306-4821 Training Korporat & Toko Hardware