Socket dan Metodenya

Soket adalah titik akhir dari saluran komunikasi dua arah. Mereka dapat berkomunikasi dalam suatu proses, antara proses pada mesin yang sama atau antar proses pada mesin yang berbeda. Pada catatan serupa, soket jaringan adalah salah satu titik akhir dalam aliran komunikasi antara dua program yang berjalan melalui jaringan komputer seperti Internet. Ini murni hal virtual dan tidak berarti perangkat keras apa pun. Soket jaringan dapat diidentifikasi dengan kombinasi unik dari alamat IP dan nomor port. Soket jaringan dapat diimplementasikan pada sejumlah jenis saluran yang berbeda seperti TCP, UDP, dan sebagainya.

Istilah berbeda terkait soket yang digunakan dalam pemrograman jaringan adalah sebagai berikut -

Domain

Domain adalah keluarga protokol yang digunakan sebagai mekanisme transportasi. Nilai-nilai ini adalah konstanta seperti AF_INET, PF_INET, PF_UNIX, PF_X25, dan seterusnya.

Tipe

Jenis berarti jenis komunikasi antara dua titik akhir, biasanya SOCK_STREAM untuk protokol berorientasi sambungan dan SOCK_DGRAM untuk protokol tanpa sambungan.

Protokol

Ini dapat digunakan untuk mengidentifikasi varian protokol dalam domain dan tipe. Nilai standarnya adalah 0. Ini biasanya ditinggalkan.

Nama host

Ini berfungsi sebagai pengenal antarmuka jaringan. Nama host bisa berupa string, alamat titik-titik, atau alamat IPV6 dengan tanda titik dua (dan mungkin titik).

Pelabuhan

Setiap server mendengarkan klien yang memanggil satu atau lebih port. Port bisa berupa nomor port Fixnum, string yang berisi nomor port, atau nama layanan.

Modul Soket Python untuk Pemrograman Soket

Untuk mengimplementasikan pemrograman socket dengan python, kita perlu menggunakan modul Socket. Berikut ini adalah sintaks sederhana untuk membuat Socket -

import socket
s = socket.socket (socket_family, socket_type, protocol = 0)

Di sini, kita perlu mengimpor pustaka soket dan kemudian membuat soket sederhana. Berikut adalah parameter berbeda yang digunakan saat membuat soket -

  • socket_family - Ini adalah AF_UNIX atau AF_INET, seperti yang dijelaskan sebelumnya.

  • socket_type - Ini adalah SOCK_STREAM atau SOCK_DGRAM.

  • protocol - Ini biasanya ditinggalkan, default ke 0.

Metode Soket

Pada bagian ini, kita akan mempelajari berbagai metode soket. Tiga set metode soket yang berbeda dijelaskan di bawah ini -

  • Metode Soket Server
  • Metode Soket Klien
  • Metode Soket Umum

Metode Soket Server

Dalam arsitektur klien-server, ada satu server terpusat yang menyediakan layanan dan banyak klien menerima layanan dari server terpusat tersebut. Klien juga melakukan permintaan ke server. Beberapa metode soket server penting dalam arsitektur ini adalah sebagai berikut -

  • socket.bind() - Metode ini mengikat alamat (nama host, nomor port) ke soket.

  • socket.listen()- Metode ini pada dasarnya mendengarkan koneksi yang dibuat ke soket. Ini memulai pendengar TCP. Backlog adalah argumen dari metode ini yang menentukan jumlah maksimum koneksi antrian. Nilai minimumnya adalah 0 dan nilai maksimumnya adalah 5.

  • socket.accept()- Ini akan menerima koneksi klien TCP. Pasangan (samb, alamat) adalah pasangan nilai kembalian dari metode ini. Di sini, samb adalah objek soket baru yang digunakan untuk mengirim dan menerima data pada koneksi dan alamat adalah alamat yang terikat pada soket. Sebelum menggunakan metode ini, metode socket.bind () dan socket.listen () harus digunakan.

Metode Soket Klien

Klien dalam arsitektur klien-server meminta server dan menerima layanan dari server. Untuk ini, hanya ada satu metode yang didedikasikan untuk klien -

  • socket.connect(address)- Metode ini secara aktif menghubungkan koneksi server atau dengan kata sederhana metode ini menghubungkan klien ke server. Alamat argumen mewakili alamat server.

Metode Soket Umum

Selain metode soket klien dan server, ada beberapa metode soket umum, yang sangat berguna dalam pemrograman soket. Metode soket umum adalah sebagai berikut -

  • socket.recv(bufsize)- Sesuai namanya, metode ini menerima pesan TCP dari soket. Argumen bufsize adalah singkatan dari ukuran buffer dan mendefinisikan data maksimum yang dapat diterima metode ini pada satu waktu.

  • socket.send(bytes)- Metode ini digunakan untuk mengirim data ke soket yang terhubung ke mesin jarak jauh. Byte argumen akan memberikan jumlah byte yang dikirim ke soket.

  • socket.recvfrom(data, address)- Metode ini menerima data dari soket. Nilai dua pasangan (data, alamat) dikembalikan dengan metode ini. Data menentukan data yang diterima dan alamat menentukan alamat soket yang mengirim data.

  • socket.sendto(data, address)- Sesuai namanya, metode ini digunakan untuk mengirim data dari soket. Nilai dua pasangan (data, alamat) dikembalikan dengan metode ini. Data menentukan jumlah byte yang dikirim dan alamat menentukan alamat mesin jarak jauh.

  • socket.close() - Cara ini akan menutup soket.

  • socket.gethostname() - Metode ini akan mengembalikan nama host.

  • socket.sendall(data)- Metode ini mengirimkan semua data ke soket yang terhubung ke mesin jarak jauh. Ini akan mentransfer data secara sembarangan sampai terjadi kesalahan dan jika itu terjadi maka itu menggunakan metode socket.close () untuk menutup soket.

Program untuk membuat koneksi antara server & klien

Untuk membuat koneksi antara server dan klien, kita perlu menulis dua program Python yang berbeda, satu untuk server dan yang lainnya untuk klien.

Program sisi server

Dalam program soket sisi server ini, kami akan menggunakan socket.bind()metode yang mengikatnya ke alamat dan port IP tertentu sehingga dapat mendengarkan permintaan masuk pada IP dan port tersebut. Nanti, kami menggunakansocket.listen()metode yang menempatkan server ke mode mendengarkan. Angka tersebut, katakanlah 4, sebagai argumen darisocket.listen()Metode berarti bahwa 4 koneksi tetap menunggu jika server sibuk dan jika soket ke-5 mencoba untuk terhubung maka koneksi ditolak. Kami akan mengirim pesan ke klien dengan menggunakansocket.send()metode. Menjelang akhir, kami menggunakansocket.accept() dan socket.close()metode untuk memulai dan menutup koneksi masing-masing. Berikut ini adalah program sisi server -

import socket
def Main():
   host = socket.gethostname()
   port = 12345
   serversocket = socket.socket()
   serversocket.bind((host,port))
   serversocket.listen(1)
   print('socket is listening')
   
   while True:
      conn,addr = serversocket.accept()
      print("Got connection from %s" % str(addr))
      msg = 'Connecting Established'+ "\r\n"
      conn.send(msg.encode('ascii'))
      conn.close()
if __name__ == '__main__':
   Main()

Program sisi klien

Dalam program soket sisi klien, kita perlu membuat objek soket. Kemudian kami akan terhubung ke port tempat server kami berjalan - 12345 dalam contoh kami. Setelah itu kita akan membuat koneksi dengan menggunakansocket.connect()metode. Kemudian dengan menggunakansocket.recv()metode, klien akan menerima pesan dari server. Akhirnya,socket.close() Metode akan menutup klien.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostname()
port = 12345

s.connect((host, port))
msg = s.recv(1024)

s.close()
print (msg.decode('ascii'))

Sekarang, setelah menjalankan program sisi server kita akan mendapatkan keluaran berikut di terminal -

socket is listening
Got connection from ('192.168.43.75', 49904)

Dan setelah menjalankan program sisi klien, kita akan mendapatkan output berikut di terminal lain -

Connection Established

Menangani pengecualian soket jaringan

Ada dua blok yaitu try dan exceptyang dapat digunakan untuk menangani pengecualian soket jaringan. Berikut ini adalah skrip Python untuk menangani pengecualian -

import socket
host = "192.168.43.75"
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
   s.bind((host,port))
   s.settimeout(3)
   data, addr = s.recvfrom(1024)
   print ("recevied from ",addr)
   print ("obtained ", data)
   s.close()
except socket.timeout :
   print ("No connection between client and server")
   s.close()

Keluaran

Program di atas menghasilkan keluaran berikut -

No connection between client and server

Pada skrip di atas, pertama kita membuat objek soket. Ini diikuti dengan memberikan alamat IP host dan nomor port tempat server kami berjalan - 12345 dalam contoh kami. Nantinya, blok try digunakan dan di dalamnya dengan menggunakansocket.bind()metode, kami akan mencoba untuk mengikat alamat IP dan port. Kami menggunakansocket.settimeout()metode untuk mengatur waktu tunggu untuk klien, dalam contoh kami, kami menetapkan 3 detik. Blok kecuali digunakan yang akan mencetak pesan jika koneksi tidak akan dibuat antara server dan klien.