1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
<?
// adresse IP du client Delphi
$addr=$_SERVER['REMOTE_ADDR'];
// il nous invoque avec un n° de port en paramètre : script.php?1234
$port=(int)$_SERVER['QUERY_STRING'];
// par défaut on prend 2048
if (!$port) $port=2048;
// ici je voulais demander l'ouverture du port en question
// pour cela il faut une adresse IP publique
$self=fsockopen($addr,$port,$errno, $errstr, 30);
if (!$self) {
echo 'Accès impossible';
exit;
}
// le nom du client
$name=$addr.':'.$port;
// recherche des clients déjà connetés
// équivalent du FindFirst/FindNext de Delphi
$dir=opendir('.');
while ($file=readdir($dir)) {
if (substr($file,0,4)=='client_') { // fichier client
// le nom du fichier contient l'adresse et le n°de port
$client=explode('_',$file); // client_addr_port
// connection vers le client
$sock=fsockopen($client[1],$client[2],$errno, $errstr, 30);
if (!$sock) {
// impossible, le client n'existe plus
unlink($file);
} else {
// sinon lui envoyer l'adresse du client qui fait la requête
fwrite($sock,chr(strlen($name)).$name);
fclose($sock);
// et informer le requêteur également :)
$client=$client[1].':'.$client[2];
fwrite($self,chr(strlen($client)).$client);
}
}
}
// fini on enregistre le fichier pour ce client
if ($f=fopen('client_'.$addr.'_'.$port,'w')) {
fwrite($f,date('dmYHi'));
fclose($f);
}
fclose($self);
echo '(c)2005 by Paul TOTH';
?> |
Partager