Pemrograman PERL Lanjutan Bagian 19: Socket

perl-logo-camel

Pada tulisan sebelumnya membahas mengenai ikhtisar pemrograman socket dengan Perl. Untuk hari ini akan mengupas bagian server dan client pada pemrograman socket dengan Perl.

Server Side Socket Calls

Socket() Call

Dalam membuat koneksi jaringan, hal pertama yang harus dilakukan adalah membuat socket. Berikut sintaks socket() call:

socket( SOCKET, DOMAIN, TYPE, PROTOCOL );

Sintaks diatas artinya membuat socket dan 3 argumen penting lainnya merupakan nilai dari koneksi TCP/IP.

Domain harus berisi PF_INET.
TYPE harus berisi SOCK_STREAM untuk koneksi TCP/IP.
Protokol harus berisi (getprotobyname(‘tcp’))[2].

Maka fungsi socket call yang akan dipanggil server akan seperti dibawah ini.

use Socket # This defines PF_INET and SOCK_STREAM
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname(‘tcp’))[2]);

 

Bind() Call

Socket yang dibuat oleh socket() call akan jarang digunakan sampai mereka menuju hostname dan port number. Server menggunakan bind() call untuk menspesifikasi port dimana mereka akan menerima koneksi dari client.

bind( SOCKET, ADDRESS );

Address family (Untuk TCP/IP, biasanya AF_INET)
Nomor port (contoh 21)
Inet address (contoh 10.12.12.13)

Bind() call digunakan oleh server agar tidak melihat alamatnya sendiri sehingga argumennya akan seperti berikut:

use Socket # This defines PF_INET and SOCK_STREAM

$port = 12345; # The unique port used by the sever to listen requests

$server_ip_address = “10.12.12.168”;

bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) 

or die “Can’t bind to port $port! \n”;

Klausa or die sangat penting karena jika server mati tanpa koneksi yang terlihat. Maka port tidak akan digunakan sampai anda menggunakan opsi SO_REUSEADDR dengan fungsi setsockcopt(). Disini fungsi pack_sockaddr_in() digunakan untuk memaketkan alamat port dan IP ke dalam format binary.

 

Listen() call

Jika program server dibutuhkan untuk mengeluarkan listen() call pada port tertentu maka ia akan menunggu request yang akan datang. Ini sintaksnya:

listen( SOCKET, QUEUESIZE );

Sintaks diatas menggunakan SOCKET descriptor untuk memanggil fungsi socket() dan QUEUEZISE merupakan nilai maximum request koneksi yang dibolekan secara simultan.

Accept() Call

Jika ini program server maka butuh accept() call untuk menerima koneksi yang datang. Ini sintaksnya:

accept(NEW_SOCKET, SOCKET);

Fungsi accept() call menerima SOCKET descriptor yang akan mengembalikan fungsi socket() dengan penyelesaian yang sukses, descriptor socket baru yakni NEW_SOCKET() akan mengembalikan komunikasi client dan server ke depannya. Jika fungsi accept() call gagal maka kembalikan FALSE yang didefiniskan dalam modul socket yang kita gunakan untuk inisialisasi.

Pada umumnya fungsi accept digunakan dalam loop tak terbatas. Ketika satu koneksi sampai di server maka ia akan membuat child proses agar bisa deal dengan server itu sendiri kemudian kembali untuk listen koneksi lainnya.

while(1) {
accept( NEW_SOCKET, SOCKT );
…….
}

Nah, Sekarang semua call sudah terhubung ke server dan mari lihat call yang dibutuhkan untuk client. Tulisan berikutnya akan membahas mengenai socket yang dibutuhkan client.

 

Client Side Socket Calls

 

The Connect() Call

JIka anda akan menyiapkan program client maka anda harus menggunakan socket() call untuk membuat socket kemudian gunakan connect() call untuk menghubungkan ke server. Jika anda lihat sintaks socket() call, sebenarnya mirip dengan server socket() call namun disini menggunakan sintaks connect() call:

connect( SOCKET, ADDRESS);

Disini SOCKET merupakan descriptor socket untuk mengembalikan socket() call yang dikeluarkan oleh client. Sedangkan ADDRESS merupakan socket address yang memang mirip dengan bind() call, kecuali berisi IP address dari remote server.

$port = 21; # For example, the ftp port
$server_ip_address = “10.12.12.168”;
connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address)))
or die “Can’t connect to port $port! \n”;

JIka anda terhubung ke server dengan sukses maka anda dapat mulai mengirim perintah ke server menggunakan descriptor SOCKET, sebaliknya jika tidak sukses maka client anda akan mengeluarkan pesan error.

 

Contoh Program Client – Server Sederhana

 

Berikut kode Perl yang mengimplementasikan program client-server sederhana menggunakan Perl socket. Disini server listen request yang masuk dan ketika koneksi sudah dibuat, maka akan mendapat pesan sukses. Client akan membaca pesan dan akan tercetak pada layar terminal. Mari lihat bagaimana hal itu bisa terjadi, anggap kita punya server dan client pada mesin yang sama.

Script untuk membuat server

.kodesocket1

 

Untuk menjalankan server dalam mode background lakukan perintah berikut:

perl server.pl &

socket1

Script untuk membuat client

kodesocket2

 

Sekarang mari mulai pada layar terminal untuk terhubung ke server dan membaca pesan dari server.

perl client.pl

socket2

 

Dan ini status terbaru dari server.

socket3

 

Catatan: Jika anda memberi alamat IP dalam notasi dot maka direkomendasikan untuk menyediakan alamat IP yang mempunyai format yang sama antara keduanya (client dan server) untuk menghindari kebingungan.

Sekian tulisan hari ini, semoga bermanfaat. Keep Fun Coding \[^ ^]/

Advertisements

One thought on “Pemrograman PERL Lanjutan Bagian 19: Socket

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s