Mata Kuliah: Jaringan Multimedia & Distribusi Data | Topik: Analisis Log TCP & UDP
Praktikum ini mensimulasikan jaringan Client-Server. Silakan bekerja berpasangan atau berkelompok.
ipconfig, dan catat angka IPv4 Address (misal: 192.168.1.15). Angka ini akan dipakai oleh Client nanti.foto_kecil.jpg (ukuran sekitar 50 - 150 KB)foto_besar.jpg (ukuran sekitar 2 - 5 MB)video_pendek.mp4 (ukuran sekitar 2 MB)video_hd.mp4 (ukuran di atas 15 MB)Jalur ini digunakan untuk mengunduh dokumen atau foto master. Lambat, tapi file dijamin 100% utuh.
import socket
import time
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 7777))
server.listen(5)
print("[LOG] 🟢 Server TCP Siap di Port 7777. Menunggu file masuk...")
while True:
koneksi, alamat = server.accept()
print(f"\n[LOG] 🤝 Koneksi masuk dari: {alamat}")
waktu_mulai = time.time()
total_byte = 0
while True:
data = koneksi.recv(4096)
if not data:
break # File habis
total_byte += len(data)
waktu_selesai = time.time()
durasi = waktu_selesai - waktu_mulai
print("-" * 40)
print(f"📄 HASIL LOG TCP (Jalur Garansi)")
print(f"Asal Pengirim : {alamat[0]}")
print(f"Total Diterima: {total_byte / 1024:.2f} KB")
print(f"Waktu Tempuh : {durasi:.4f} detik")
print(f"Status : 100% UTUH (Tidak ada packet loss)")
print("-" * 40)
koneksi.close()
import socket
import time
import os
# PENTING: Ganti nama file dan IP di bawah ini!
nama_file = "foto_kecil.jpg"
ip_server = '192.168.1.100' # <--- GANTI DENGAN IP KOMPUTER SERVER TEMAN KALIAN
ukuran_asli = os.path.getsize(nama_file)
print(f"[LOG] 📦 Mempersiapkan File: {nama_file} ({ukuran_asli / 1024:.2f} KB)")
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((ip_server, 7777))
waktu_mulai = time.time()
with open(nama_file, 'rb') as file:
data = file.read()
client.sendall(data) # TCP memastikan semua data terkirim
waktu_selesai = time.time()
print(f"[LOG] ✅ File berhasil dikirim utuh!")
print(f"[LOG] ⏱️ Waktu proses di pengirim: {waktu_selesai - waktu_mulai:.4f} detik")
client.close()
Cara Pengujian: Jalankan tcp_server.py terlebih dahulu. Kemudian jalankan tcp_client.py untuk mengirim foto_kecil.jpg. Catat hasil log di server. Ubah nama file di skrip client menjadi foto_besar.jpg, jalankan lagi, dan catat hasilnya.
Skenario ini mensimulasikan Live Streaming Video. Pengirim menembakkan potongan video dengan cepat tanpa peduli *Packet Loss* atau *Jitter*.
import socket
import time
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
server.settimeout(2.0)
print("[LOG] 📻 Server UDP Siap di Port 8888. Memantau Siaran & Jitter...")
while True:
total_paket = 0
total_byte = 0
waktu_mulai = 0
waktu_sebelumnya = None
jitter_tertinggi = 0
pengirim_terakhir = None
try:
while True:
data, alamat = server.recvfrom(4096)
waktu_sekarang = time.time()
if total_paket == 0:
waktu_mulai = waktu_sekarang
print(f"\n[LOG] 🌊 Aliran data masuk dari {alamat}...")
if data == b'END_OF_STREAM':
break
# Deteksi Jitter
if waktu_sebelumnya is not None:
jeda = (waktu_sekarang - waktu_sebelumnya) * 1000
if jeda > jitter_tertinggi:
jitter_tertinggi = jeda
# Tampilkan peringatan jika paket mendadak nyangkut > 20ms
if jeda > 20.0:
print(f" ⚠️ JITTER TERDETEKSI! Paket terlambat {jeda:.1f} ms")
waktu_sebelumnya = waktu_sekarang
pengirim_terakhir = alamat
total_paket += 1
total_byte += len(data)
except socket.timeout:
if total_paket > 0:
print("[LOG] ⏳ Waktu habis. Aliran terputus.")
if total_paket > 0:
durasi = time.time() - waktu_mulai
print("-" * 40)
print(f"🎬 HASIL LOG UDP (Live Streaming)")
print(f"Asal Pengirim : {pengirim_terakhir[0]}")
print(f"Paket Ditangkap : {total_paket} paket (Gayung)")
print(f"Total Diterima : {total_byte / 1024:.2f} KB")
print(f"Waktu Tempuh : {durasi:.4f} detik")
print(f"Jitter Terparah : {jitter_tertinggi:.2f} ms")
print("-" * 40)
import socket
import time
import os
# PENTING: Ganti nama file dan IP Server!
nama_file = "video_pendek.mp4"
ip_server = '192.168.1.100'
ukuran_asli = os.path.getsize(nama_file)
print(f"[LOG] 🎥 Mempersiapkan Siaran: {nama_file} ({ukuran_asli / 1024:.2f} KB)")
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
waktu_mulai = time.time()
paket_dikirim = 0
UKURAN_GAYUNG = 4096 # Potong video per 4 KB
with open(nama_file, 'rb') as file:
while True:
potongan = file.read(UKURAN_GAYUNG)
if not potongan:
break
client.sendto(potongan, (ip_server, 8888))
paket_dikirim += 1
# Simulasi Kecepatan Tembak (Komentari baris di bawah untuk melihat Packet Loss!)
time.sleep(0.0001)
client.sendto(b'END_OF_STREAM', (ip_server, 8888))
waktu_selesai = time.time()
print(f"[LOG] 🚀 Siaran selesai ditembakkan!")
print(f"[LOG] Paket Terkirim: {paket_dikirim} paket")
print(f"[LOG] Waktu tembak : {waktu_selesai - waktu_mulai:.4f} detik")
client.close()
Cara Pengujian: Uji pertama gunakan video_pendek.mp4. Kemudian ubah ke video_hd.mp4.
Eksperimen Wajib: Pada saat mengirim video_hd.mp4, ubah baris time.sleep(0.0001) menjadi # time.sleep(0.0001) (jadikan komentar agar tidak ada jeda). Tembakkan paketnya, dan perhatikan apa yang terjadi pada jumlah paket di Log Server!
Salin tabel di bawah ini ke dalam dokumen (Word/Google Docs), isi berdasarkan hasil log dari Terminal/CMD kalian, dan jawab ketiga pertanyaannya. Kumpulkan beserta screenshot Terminal Server kalian.
| Skenario | Ukuran Dikirim (Client) | Ukuran Diterima (Server) | Waktu Tempuh | Catatan Log Server |
|---|---|---|---|---|
| 1. TCP (Foto Kecil) | Status: ? | |||
| 2. TCP (Foto Besar) | Status: ? | |||
| 3. UDP (Video Pendek) | ... Paket | ... Paket | Jitter: ? | |
| 4. UDP (Video HD + Tanpa Jeda/Sleep) | ... Paket | ... Paket | Ada Packet Loss? |