SOCKET PROGRAMMING – TCP & UDP dengan Python

1. Tujuan Praktikum
Setelah mengikuti praktikum ini, mahasiswa mampu:
- Memahami konsep dasar komunikasi berbasis socket.
- Membedakan cara kerja protokol TCP dan UDP.
- Membuat program TCP Client–Server menggunakan Python.
- Membuat program UDP Client–Server menggunakan Python.
- Menguji proses pengiriman dan penerimaan data antar perangkat.
- Menganalisis kelebihan dan kekurangan TCP vs UDP pada IoT.
2. Teori Dasar

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
- Kirim pesan dari client → lihat response server
- Uji koneksi antar laptop (ubah IP server)
- 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
- Jalankan server UDP
- Jalankan client UDP
- 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
| Parameter | TCP | UDP |
| Koneksi | Ya | Tidak |
| Reliability | Sangat tinggi | Rendah |
| Kecepatan | Lebih lambat | Sangat cepat |
| Cocok untuk | Sensor penting, IoT server | Streaming, broadcast, sensor cepat |
| Urutan data | Terjamin | Tidak terjamin |
| Overhead | Tinggi | Rendah |
7. Tugas Praktikum
- Modifikasi server TCP untuk menerima beberapa client (multi-threaded).
- Buat server UDP yang mengirim data broadcast ke banyak client.
- Bandingkan performa TCP vs UDP untuk mengirim 1000 data sensor.
- 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 error | Penyebab | Solusi |
|---|---|---|
| ConnectionRefusedError | Server belum berjalan atau port salah | Jalankan server terlebih dahulu, cek nomor port |
| TimeoutError / tidak tersambung antar-laptop | Firewall Windows memblokir port | Izinkan Python di Windows Defender Firewall untuk jaringan Private |
| OSError: Address already in use | Port masih dipakai proses lama | Tutup proses lama atau gunakan SO_REUSEADDR |
| Pesan terpotong atau tergabung (TCP) | TCP adalah aliran byte, bukan paket | Gunakan 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)
- Judul & tujuan
- Dasar teori TCP/UDP
- Kode program
- Hasil uji coba (screenshot)
- Analisis perbedaan TCP vs UDP
- Kesimpulan
- 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.




