Okey, in prima parte a acestui articol am descris fiecare functie legata de socket pe care o vom folosi in tutorial.
Avand in vedere ca este un script PHP, vom incepe scriptul cu tag-ul de deschidere <?php si set_time_limit(0), deoarece Daemon-ul, prin menirea sa, trebuie sa ruleze fara oprire.

In acest tutorial voi prezenta crearea unui Daemon care trimite un mesaj de intampinare la accesare si calculeaza suma a 2 numere dupa care deconecteaza clientul.
Variabilele folosite in script:
$Socket - Resursa SOCKET;
$IP - IP-ul host (cel care accepta conexiuni);
$Port - Port pe care se accepta conexiunile;
$Conexiune - Conexiune acceptata cu functia socket_accept;
$Date - Date trimise/primite spre/de la client;
$Intampinare - Mesaj de intampinare client;

Sa incepem cu inceputul… avem resursa Socket initializata ca AF_INET, SOCK_STREAM (Conexiune de tip IPv4/TCP) ce accepta conexiuni nelimitate pe ip-ul 127.0.0.1 (localhost), port 4444.
Pana aici avem urmatorul script:

<?
set_time_limit(0);

$IP = ‘127.0.0.1′;
$Port = ‘4444′;
$Intampinare = “Salut, acesta este un exemplu de calculator (a+b).\n”;

$Socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($Socket, $IP, $Port);
socket_listen($Socket, 0);
$Conexiune = socket_accept($Socket);
?>

Pentru a rula continuu, partea cu socket_accept trebuie sa ruleze intr-o bucla de tip WHILE in care sa execute operatiile.
Se ajunge la urmatorul script:

<?
set_time_limit(0);

$IP = ‘127.0.0.1′;
$Port = ‘4444′;
$Intampinare = “Salut, acesta este un exemplu de calculator (a+b).\n”;

$Socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($Socket, $IP, $Port);
socket_listen($Socket, 0);

while($Conexiune = socket_accept($Socket)){

}
?>

Acum, in interiorul buclei WHILE putem sa citim si sa scriem catre un client.
In primul rand ii transmitem clientului proaspat conectat mesajul de intampinare:

socket_write($Conexiune, $Intampinare, strlen ($Intampinare));

dupa care afisam textul “a =” pentru a sti clientul ce are de facut si imediat dupa aceea citim ce introduce clientul de la tastatura. Aceasta operatie se face de 2 ori (o data pentru “a”, apoi pentru “b”). Deoarece utilizatorul poate introduce si altceva decat valori numerice, se pune conditia de float pentru ce se citeste de la tastatura.
Dupa realizarea operatiei de adunare se afiseaza rezultatul alaturi de mesajul de adio si se inchide conexiunea catre client

$Date     = “a = “;
socket_write($Conexiune, $Date, strlen ($Date));
$Date     = socket_read($Conexiune, 1024);
$a         = (float) $Date;

$Date     = “b = “;
socket_write($Conexiune, $Date, strlen ($Date));
$Date     = socket_read($Conexiune, 1024);
$b        = (float) $Date;

$c        = $a + $b;

$Date = “Rezultatul adunarii $a + $b este $c\nBye Bye\n”;
socket_write($Conexiune, $Date, strlen ($Date));
socket_close($Conexiune);

Asadar, scriptul complet este urmatorul:

<?
set_time_limit(0);

$IP = '127.0.0.1';
$Port = '4444';
$Intampinare = "Salut, acesta este un exemplu de calculator (a+b).\n";

$Socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($Socket, $IP, $Port);
socket_listen($Socket, 0);

  while($Conexiune = socket_accept($Socket)){
	socket_write($Conexiune, $Intampinare, strlen ($Intampinare));

	$Date 	= "a = ";
	socket_write($Conexiune, $Date, strlen ($Date));
	$Date 	= socket_read($Conexiune, 1024);
	$a 	= (float) $Date;

	$Date 	= "b = ";
	socket_write($Conexiune, $Date, strlen ($Date));
	$Date 	= socket_read($Conexiune, 1024);
	$b	= (float) $Date;

	$c	= $a + $b;

	$Date = "Rezultatul adunarii $a + $b este $c\nBye Bye\n";
	socket_write($Conexiune, $Date, strlen ($Date));
	socket_close($Conexiune);
  }
socket_close($Socket);
?>

Orice fel de sugestii pentru imbunatatirea calitatii acestui website sunt binevenite

Alte articole asemanatoare