Déclaration
int fsockopen (string [udp://]hostname, int port [, int errno [, string errstr [, double timeout]]])
- hostname : adresse du serveur distant
- port : Port distant du serveur à l'écoute
- errno : numéro d'erreur renvoyée
- errstr : description de l'erreur renvoyée
- timeout : Temps maximal en seconde pendant lequel la fonction essaiera de se connecter.
Exemple d'utilisation HTTP : Tester l'exemple
Récupérer le contenu HTML d'une page distante. Pour cela on créé un petit formulaire avec un champ dont le nom sera urlbase.
- Le formulaire HTML (test_socket.htm) :
<form method="post" action="test_socket.php">
<input type="text" name="urlbase" value="www.asp-magazine.com">
</form>
- Le code php de traitement (test_socket.php) :
<?
// On teste si la variable urlbase existe
if (isset($urlbase)) {
$sock = fsockopen ($urlbase, 80, &$errno, &$errstr, 30);
if (!$sock) {
// Il y a eu une erreur
echo "Une erreur s'est produite<br>\n";
echo "Numéro d'erreur : $errno<br>\n";
echo "Description : $errstr<br>\n";
} else {
// Envoi au serveur : on souhaite une réponse HTTP
fputs ($sock, "GET / HTTP/1.0\r\n\r\n");
//Lecture de la réponse du serveur
while (!feof($sock)) {
echo fgets ($sock,128);
}
// fermeture du socket
fclose ($sock);
}
}
else {
// la variable urlbase n'existe pas
// On redirige l'utilisateur vers la page formulaire
Header("Location: test_socket.htm");
}
?>
Exemple d'utilisation avec le protocole UDP
Le protocole UDP est au même titre que TCP un protocole de transport des données. Mais contrairement à ce dernier il assure une transmission dîte "en mode non connecté et non fiable". Ceci signifie simplement, que le client et le serveur n'établissent entre eux aucune connexion, mais aussi que le client peut poster des messages au serveur, sans jamais savoir si le serveur les reçoit : à moins que la réponse du serveur ne se fasse dans un laps de temps (timeout) défini sur le client. Si le client reçoit dans ce laps de temps une réponse du serveur, alors il peut être sûr que le serveur à reçu son message au moins une fois. Un programme communiquant avec UDP, peut donc être à la fois le client et le serveur.
Utilisation de fsockopen avec UDP
<?php
// Initialisation de l'appel (host, port , etc...)
$sockudp = fsockopen("udp://127.0.0.1", 4556, &$errno, &$errstr);
if (!$sockudp) { // Il y a eu une erreur
echo "Une erreur s'est produite<br>\n";
echo "Numéro d'erreur : $errno<br>\n";
echo "Description : $errstr<br>\n";
} else { // envoi d'un message au serveur UDP
fwrite($sockudp,"Bonjour je suis un client UDP\n");
// Attente d'une réponse du serveur
echo fread($sockudp, 26);
// fermeture du socket
fclose($sockudp); }
?>