Dasar Komunikasi TCP Socket di Python
TCP (Transmission Control Protocol) adalah protokol berorientasi koneksi yang menjamin pengiriman data yang andal antara dua titik (endpoint). Dalam Python, modul socket menyediakan antarmuka tingkat rendah untuk mengakses API socket sistem operasi. Komunikasi TCP memerlukan proses 'handshake' (three-way handshake) sebelum data dapat dipertukarkan, memastikan integritas data.
Struktur Dasar Server dan Client
Untuk membangun aplikasi berbasis TCP, Anda memerlukan dua entitas: Server yang mendengarkan (listening) pada port tertentu, dan Client yang melakukan inisiasi koneksi ke alamat IP dan port server tersebut.
Contoh Implementasi Server
import socket
def start_server():
host = '127.0.0.1'
port = 65432
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
conn.sendall(data)
if __name__ == '__main__':
start_server()Contoh Implementasi Client
import socket
def start_client():
host = '127.0.0.1'
port = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
s.sendall(b'Halo, Server!')
data = s.recv(1024)
print(f"Diterima dari server: {data.decode()}")
if __name__ == '__main__':
start_client()Tabel Perbandingan Metode Socket
| Metode | Fungsi |
|---|---|
| socket.socket() | Membuat objek socket baru |
| bind() | Mengikat socket ke alamat dan port |
| listen() | Mulai mendengarkan koneksi masuk |
| accept() | Menerima koneksi baru |
| connect() | Memulai koneksi ke server |
| sendall() | Mengirim data ke socket |
| recv() | Menerima data dari socket |
Tips Troubleshooting Lapangan
- Address already in use: Sering terjadi jika server dimatikan paksa. Gunakan
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)sebelumbind(). - Timeout: Pastikan firewall tidak memblokir port yang digunakan (misal: 65432).
- Blocking: Secara default,
recv()bersifat memblokir. Gunakansetblocking(False)atau modulselectorsuntuk aplikasi non-blocking/asinkron. - Encoding: Ingat bahwa socket mengirim data dalam bentuk bytes, bukan string. Selalu gunakan
.encode('utf-8')dan.decode('utf-8').
🔍 Orang Lain Juga Mencari Ini
Python Socket Programming Tutorial
Python Tcp Server Example
Python Socket Sendall Vs Send
Python Socket Non-blocking
Python Socket Select Module
Python Socket Programming Best Practices
Python Socket Error Handling
Python Socket Bind Address Already In Use
Python Socket Programming Multi-client
Python Socket Vs Websockets
Python Socket Programming For Beginners
Python Socket Recv Buffer Size
Python Socket Timeout Exception
Python Socket Close Connection
Python Socket Programming Architecture