Socket programming adalah pemrograman yang menggunakan socket. Socket ini semacam terowongan/tunnel yang bisa dipakai untuk komunikasi/pertukaran arah secara bolak-balik. Dengan socket programming, komunikasi dapat terjalin antara bahasa pemrograman yang berbeda, antara tingkatan user yang berbeda, bahkan antar komputer yang berbeda atau gabungan ketiganya.
Sebagai contoh kita akan membuat contoh socket programming untuk manajemen email
- Socket server
Kita akan membuat socket server yang dibuat dengan bahasa Perl yang dijalankan dengan user root (super user) untuk menanggapi suatu permintaan dari socket client:
$server_sock = new IO::Socket::INET (LocalPort => 1234, Listen => $SOMAXCONN,Proto => ‘tcp’, Reuse => 1);
unless ($server_sock)
{
die “Could not create server socket; $!”;
}while ($sock_to_client = $server_sock->accept())
{
$sSocketData = <$sock_to_client>;
print $sSocketData;
@SockArgv = split(/:/,$sSocketData);
$request = $SockArgv[0];
if ($request eq “ae”)
{
$email=$SockArgv[1];
$password=$SockArgv[2];
$hasil = add_email($email, $password);
print “$hasil\n”;
print $sock_to_client “$hasil\n”;
}
elsif ($request eq “cp”)
{
$email=$SockArgv[1];
$old_password=$SockArgv[2];
$new_password=$SockArgv[3];
$hasil = change_password($email,$old_password,$new_password);
print “$hasil\n”;
print $sock_to_client “$hasil\n”;
}
elsif ($request eq “rm”)
{
$perintah=”/home/setup/cron/smtpd/restart_smtpd > hasil”;
system($perintah);
$perintah =”cat hasil”;
$hasil = qx/$perintah/;
$hasil =~ s/\n/<br>/g;
print “$hasil\n”;
print $sock_to_client “$hasil\n”;
}
elsif ($request eq “qr)
{
$perintah=”qmail-qstat > hasil; qmail-qread >> hasil;qmail-qstat >> hasil;echo ‘remote dan done’>> hasil;qmail-qread | grep remote | wc -l>> hasil;qmail-qread | grep done | wc -l >> hasil; ceksmtp >> hasil”;
system($perintah);
$perintah =”cat hasil”;
$hasil = qx/$perintah/;
$hasil =~ s/\n/<br>/g;
#print “$hasil\n”;
print $sock_to_client “$hasil\n”;
}
elsif ($request eq “rm”)
{
$myid=$SockArgv[1];
$totbaris=$SockArgv[2];
$perintah=”cat `find /var/qmail/queue -name $myid | grep mess` | head -$totbaris > hasil”;
system($perintah);
$perintah =”cat hasil”;
$hasil = qx/$perintah/;
$hasil =~ s/\n/<br>/g;
#print “$hasil\n”;
print $sock_to_client “$hasil\n”;
}
elsif ($request eq “dm”)
{
$myid=$SockArgv[1];
$perintah=”rm -f `find /var/qmail/queue -name $myid `”;
system($perintah);
print $sock_to_client “selesai delete\n”;
}
elsif ($request eq “nae”)
{
$email=$SockArgv[1];
$perintah=”/home/setup/daemon/refresh_user_password.pl”;
system($perintah);
$perintah=”/home/setup/daemon/update_user”;
system($perintah);
print $sock_to_client “selesai non active $email\n”;
}
$sock_to_client->close;
} close($server_sock) - Socket client
Untuk socket client ini kita menggunakan bahasa pemrograman PHP yang dijalankan oleh user biasa
function AddEmail($email,$password)
{
$IP=”localhost”;
$Port=1234;
$fp = fsockopen($IP,$Port);
$SocketData=”ae:$email:$password:\n”;
fputs ($fp,$SocketData);
$hasil = fgets($fp,100);
return $hasil;
}
function ChangePassword($email,$old_password,$new_password)
{
$IP=”localhost”;
$Port=1234;
$fp = fsockopen($IP,$Port);
$SocketData=”cp:$email:$old_password:$new_password:\n”;
fputs ($fp,$SocketData);
$hasil = fgets($fp,100);
return $hasil;
}
function restart_smtpd()
{
$IP=”localhost”;
$Port=1234;
$fp = fsockopen($IP,$Port);
$SocketData=”rs::::\n”;
fputs ($fp,$SocketData);
$hasil = fgets($fp,500);
return $hasil;
}function qmail_qread()
{
$IP=”localhost”;
$Port=1234;
$fp = fsockopen($IP,$Port);
$SocketData=”qr::::\n”;
fputs ($fp,$SocketData);
$hasil = fgets($fp,200000);
return $hasil;
}
Kunjungi www.proweb.co.id untuk menambah wawasan anda.