PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
MODUL 1
PEMROGRAMAN SOCKET
1.1 Pengertian
Socket adalah interface pada jaringan yang menjadi titik komunikasi antar mesin pada
Internet Protocol. Socket adalah titik komunikasi dari lalu lintas komunikasi dari lalu lintas
komunikasi antar proses di dalam sebuah jaringan komputer.
• Contoh :
1. Chat
2. Transfer File (seperti FIleZilla, WinSCP)
3. Transaksi-transaski penting seperti Mesin ATM di Bank
4. Game online
5. Monitoring jaringan
6. Aplikasi-aplikasi broadcast seperti YouTube
• Elemen Utama
1. Protokol (TCP/UDP)
2. Local IP Address
3. Local Port
4. Remote IP Address
5. Remote Port
1
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
Gambar 1. Bagan Socket Client Server
2
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
• Pengiriman data pada aplikasi socket
1. TCP (Transmission Control Protocol) Aplikasi FTP, SMTP, SSH, TELNET, aplikasi
chat, transfer file, ataupun transaksi-transaksi penting seperti Mesin ATM di Bank.
Gambar 2. TCP
2. UDP (User Data Protocol) Aplikasi SunRPC, SNMP, DNS, TFTP, aplikasi monitoring
jaringan, game online dan aplikasi-aplikasi broadcast seperti YouTube.
Gambar 3. UDP
• Port
Port merupakan sebuah koneksi data virtual yang digunakan aplikasi untuk bertukar data
secara langsung. Contoh :
- HTTP 80
- HTTPS 443
- FTP 21
- SSH 22
- TELNET 23
- DNS 53
3
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
• Jenis Port
- Well-known ports
Merupakan port yang telah digunakan secara internal oleh Sistem, misalnya port
untuk service HTTP, HTTPS, FTP, SSH, DNS dan seterusnya. Port yang telah
digunakan ini adalah port 0 sampai dengan port 1023.
- Registered ports
Port ini dapat digunakan dalam aplikasi Anda, range-nya adalah port 1024 hingga
port 49151 dan dapat dipilih secara bebas.
1. Dynamic/Private ports
Dari port 49152 sampai dengan port 65535.
1.2 Pemrograman Socket
Pada praktikum kali ini, pastikan Anda sudah meng-install docker-xampp
(tomsik68/xampp:5) dan gunakan text editor VSCode / Sublime Text untuk mengetikkan
source code. Buatlah folder “socket” yang berisikan file [Link] dan [Link] pada
folder “D:\htdocs”. Source code [Link] dan [Link] ini hanya dapat dijalankan
pada PHP versi 5. Start container XAMPP 5:
> docker container start xampp5
Akses phpinfo pada localhost menggunakan web browser
[Link] dan pastikan PHP extension sockets sudah aktif.
Gambar 4. PHP Sockets Extension
4
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
1.2.1 Aplikasi sederhana untuk mengambil Laman Web Google dengan Pemrograman Socket.
Berikut ini merupakan contoh mengambil laman web di google menggunakan
pemrograman socket.
1. Pada file [Link], ketikkan source code berikut dan simpan file tersebut di
“D:\htdocs\socket”.
Gambar 5. File [Link]
2. Pastikan perangkat terkoneksi dengan internet.
3. Jalankan file [Link] melalui web browser di url
5
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
[Link]
Gambar 6. Menjalankan file [Link] melalui web browser
1.2.2 Aplikasi Chatting dengan Pemrograman Socket
Berikut ini merupakan contoh membangun aplikasi chatting menggunakan
pemrograman socket.
1. Ketikkan source code berikut pada file [Link] dan simpan file tersebut di
“D:\htdocs\socket”.
<?php
error_reporting(1);
set_time_limit (0);
$address = "[Link]";
$port = 5000;
$max_clients = 5;
// Creating a socket
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{ // Error handling
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if(!socket_bind($sock, $address, $port))
{ // Error handling
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
// Listens for a connection on a socket
if(!socket_listen ($sock, $max_clients))
{ // Error handling
6
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode] $errormsg
\n");
}
echo "Socket listen OK \n";
echo "Waiting for incoming connections... \n";
//array of client sockets
$client_socks = array();
//array of sockets to read
$read = array();
//start loop to listen for incoming connections and process
existing connections
while (true)
{ //prepare array of readable client sockets
$read = array();
//first socket is the master socket
$read[0] = $sock;
//now add the existing client sockets
for ($i = 0; $i < $max_clients; $i++)
{ if($client_socks[$i] != null)
{ $read[$i+1] = $client_socks[$i];
}
}
//Runs the select() system call on the given arrays of
sockets
if(socket_select($read, $write, $except, null) === false)
{ // Error handling
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode]
$errormsg \n");
}
7
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
//if ready contains the master socket, then a new
connection has come in
if (in_array($sock, $read))
{ for ($i = 0; $i < $max_clients; $i++)
{ if ($client_socks[$i] == null)
{ //Accepts a connection on a socket
$client_socks[$i] = socket_accept($sock);
//display information about the client who is
connected
if(socket_getpeername($client_socks[$i],
$address, $port))
{ echo "Client $address : $port is now
connected to Us. \n";
}
//Send Welcome message to client
$message = "Welcome to php socket server
version 1.0 \n";
$message .= "Enter a message and press enter.
I shall reply back \n";
socket_write($client_socks[$i], $message);
break;
}
}
}
//check each client if they send any data
for ($i = 0; $i < $max_clients; $i++)
{ if (in_array($client_socks[$i], $read))
{ //Reads a maximum of length bytes from a socket
$input = socket_read($client_socks[$i], 1024);
if ($input == null)
{ //zero length string meaning disconnected,
remove and close the socket
// remove the socket
unset($client_socks[$i]);
// close the socket
socket_close($client_socks[$i]);
}
$n = trim($input);
$output = $client_socks[$i]." Said: ... $input";
echo "Sending output to client \n";
//send response to client
8
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
//socket_write($client_socks[$i], $output);
// send response to other client
foreach (array_diff_key($client_socks, array($i
=> 0)) as $client_sock) {
socket_write($client_sock, $output);
}
}
}
}
2. Buat container xampp5server dengan port 5000 di Command Prompt
> docker run --name xampp5server -p 5000:5000 -p 8085:80 -p 3385:3306 -p 2285:22 -d
-v D:\htdocs:/www tomsik68/xampp:5
Jalankan server chat pada file [Link] tersebut
> docker exec -ti xampp5server /opt/lampp/bin/php /www/socket/[Link]
Jika ingin menghentikan container xampp5server jalankan perintah
> docker container stop xampp5server
Jika ingin menjalankan container xampp5server jalankan perintah
> docker container start xampp5server
3. Pastikan perangkat terkoneksi dengan internet. Tambahkan Repository pada Debian Server
di VirtualBox lalu install Telnet.
$ sudo apt-get update
$ sudo apt-get install -y telnet
4. Shutdown Debian Server dengan perintah
$ sudo /sbin/init 0
atau
$ sudo /sbin/shutdown -P now
9
PRAKTIKUM SISTEM TERDISTRIBUSI
JURUSAN TEKNIK INFORMATIKA
UIN MAULANA MALIK IBRAHIM MALANG
5. Lakukan Cloning dengan klik kanan pada Debian Server, pilih “Clone” lalu
pilih “Full clone” pada langkah selanjutnya.
Gambar 7. Debian Server Cloning
6. Jalankan Debian Server Clone dan ganti IP Address pada Debian Server Clone agar tidak
bentrok dengan IP Address Debian Server. Reboot Debian Server Cloning.
$ sudo nano /etc/network/interfaces
$ sudo /sbin/reboot
7. Jalankan kedua Debian Server tersebut dan masing-masing server menjalankan Telnet ke
IP Address [Link] (Windows) port 5000 untuk mencoba aplikasi chatting.
$ telnet [Link] 5000
8. Setelah selesai mencoba aplikasi chatting, hapus Debian Server Clone dan jangan
menghapus Debian Server. Klik kanan pada Debian Server Clone lalu pilih Remove untuk
menghapus Debian Server Clone.
10