unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Socket

Socket #

Sockets adalah antarmuka yang memungkinkan komunikasi antara dua titik akhir, biasanya antara server dan klien, baik dalam jaringan lokal maupun internet. Sockets digunakan untuk mengirim dan menerima data melalui jaringan menggunakan berbagai protokol, seperti TCP (Transmission Control Protocol) dan UDP (User Datagram Protocol).

Socket di Python #

Python menyediakan modul socket yang memungkinkan Anda untuk bekerja dengan sockets. Berikut adalah komponen utama yang perlu Anda pahami:

  1. Socket Creation: Membuat objek socket.
  2. Binding: Mengikat socket ke alamat IP dan nomor port tertentu.
  3. Listening: Mendengarkan koneksi masuk (untuk server).
  4. Accepting: Menerima koneksi yang masuk (untuk server).
  5. Connecting: Menghubungkan ke server (untuk klien).
  6. Sending/Receiving: Mengirim dan menerima data melalui socket.

TCP Socket #

Server #

import socket

def start_server(host, port):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(5)
    print(f"Server listening on {host}:{port}")

    while True:
        client_socket, client_address = server_socket.accept()
        print(f"Connection from {client_address}")
        handle_client(client_socket)

def handle_client(client_socket):
    with client_socket:
        while True:
            data = client_socket.recv(1024)
            if not data:
                break
            print(f"Received: {data.decode()}")
            client_socket.sendall(data)

if __name__ == "__main__":
    start_server("127.0.0.1", 65432)

Klien #

import socket

def start_client(host, port):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    print(f"Connected to {host}:{port}")

    try:
        while True:
            message = input("Enter message: ")
            if message.lower() == 'exit':
                break
            client_socket.sendall(message.encode())
            data = client_socket.recv(1024)
            print(f"Received: {data.decode()}")
    finally:
        client_socket.close()

if __name__ == "__main__":
    start_client("127.0.0.1", 65432)

Detail #

  1. Socket Creation:

    • socket.AF_INET menunjukkan penggunaan alamat IPv4.
    • socket.SOCK_STREAM menunjukkan penggunaan protokol TCP.
  2. Binding (Server):

    • bind((host, port)) mengikat socket ke alamat IP dan nomor port tertentu.
  3. Listening (Server):

    • listen(5) membuat server mendengarkan koneksi masuk. Parameter 5 menunjukkan jumlah maksimum koneksi yang dapat diantre.
  4. Accepting (Server):

    • accept() menerima koneksi masuk dan mengembalikan socket baru dan alamat klien.
  5. Connecting (Client):

    • connect((host, port)) menghubungkan klien ke server.
  6. Sending/Receiving:

    • sendall(data) mengirim data ke socket. Pada server, data diterima melalui recv(1024) yang menerima data hingga 1024 byte.

UDP Socket #

Server #

import socket

def start_server(host, port):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind((host, port))
    print(f"Server listening on {host}:{port}")

    while True:
        data, client_address = server_socket.recvfrom(1024)
        print(f"Received {data.decode()} from {client_address}")
        server_socket.sendto(data, client_address)

if __name__ == "__main__":
    start_server("127.0.0.1", 65432)

Klien #

import socket

def start_client(host, port):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_address = (host, port)

    try:
        while True:
            message = input("Enter message: ")
            if message.lower() == 'exit':
                break
            client_socket.sendto(message.encode(), server_address)
            data, _ = client_socket.recvfrom(1024)
            print(f"Received: {data.decode()}")
    finally:
        client_socket.close()

if __name__ == "__main__":
    start_client("127.0.0.1", 65432)

Detail #

  1. Socket Creation:

    • socket.AF_INET menunjukkan penggunaan alamat IPv4.
    • socket.SOCK_DGRAM menunjukkan penggunaan protokol UDP.
  2. Binding (Server):

    • bind((host, port)) mengikat socket ke alamat IP dan nomor port tertentu.
  3. Receiving Data (Server):

    • recvfrom(1024) menerima data hingga 1024 byte dan mengembalikan data serta alamat pengirim.
  4. Sending Data (Client):

    • sendto(data, address) mengirim data ke alamat tertentu.

Kesimpulan #

Sockets memungkinkan komunikasi antara dua titik akhir jaringan dan digunakan dalam banyak aplikasi jaringan seperti web server, klien email, aplikasi chatting, dan banyak lagi. Dengan memahami cara kerja sockets dan cara mengimplementasikannya di Python, Anda dapat membangun aplikasi jaringan yang efisien dan andal.

« Decorator
Web Socket »