2012-12-29 2 views
9

je dois mettre en œuvre un script php sur mon site qui procédez comme suit:Connexion à un serveur TCP/IP via le script php

  1. Se connecter à un serveur distant
  2. Envoyer paquet au serveur
  3. paquet de réception du serveur

Tout est déjà configuré sur le côté serveur pour répondre aux demandes de paquets, je ne ai besoin de savoir comment utiliser PHP pour se connecter au serveur TCP/IP.

Des idées dans quelle direction regarder?

+1

est w Vous cherchez ...? –

+0

vous voulez dire similaire à donner la commande "ping" dans le terminal, voulez-vous implémenter par PHP? –

+0

PHP manuel est la bonne direction pour commencer. http://php.net/manual/fr/function.fsockopen.php –

Répondre

16

facilement avec les sockets PHP:

<?php 
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    fwrite($fp, "You message"); 
    while (!feof($fp)) { 
     echo fgets($fp, 128); 
    } 
    fclose($fp); 
} 
?> 

Lire la suite - http://php.net/manual/en/function.fsockopen.php programmation socket

+0

Je l'ai essayé et cela fonctionne d'une certaine manière - je vois qu'il est une nouvelle connexion dans le journal du serveur. Cependant, la page indique qu'il y a eu un timeout. Avez-vous une idée de pourquoi cela pourrait être ainsi? –

+0

@John Peut-être que votre serveur ne ferme pas la connexion, donc 'feof' ne retourne pas vrai? –

+0

Désolé pour le bump mais j'obtiens un 'Connection Refused (61)', même après avoir ouvert les ports via 'ufw' du côté serveur. – Razgriz

8
<?php 
error_reporting(E_ALL); 

/* Allow the script to hang around waiting for connections. */ 
set_time_limit(0); 

/* Turn on implicit output flushing so we see what we're getting 
* as it comes in. */ 
ob_implicit_flush(); 

$address = '192.168.1.53'; 
$port = 10000; 

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
} 

if (socket_bind($sock, $address, $port) === false) { 
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
} 

if (socket_listen($sock, 5) === false) { 
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
} 

do { 
    if (($msgsock = socket_accept($sock)) === false) { 
     echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
     break; 
    } 
    /* Send instructions. */ 
    $msg = "\nWelcome to the PHP Test Server. \n" . 
     "To quit, type 'quit'. To shut down the server type 'shutdown'.\n"; 
    socket_write($msgsock, $msg, strlen($msg)); 

    do { 
     if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) { 
      echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n"; 
      break 2; 
     } 
     if (!$buf = trim($buf)) { 
      continue; 
     } 
     if ($buf == 'quit') { 
      break; 
     } 
     if ($buf == 'shutdown') { 
      socket_close($msgsock); 
      break 2; 
     } 
     $talkback = "PHP: You said '$buf'.\n"; 
     socket_write($msgsock, $talkback, strlen($talkback)); 
     echo "$buf\n"; 
    } while (true); 
    socket_close($msgsock); 
} while (true); 

socket_close($sock); 
?> 

this is just an example from net for further look documentation

connexion au serveur TCP

$host="192.168.1.99"; 
    $port = 1234; // open a client connection 
    $fp = fsockopen ($host, $port, $errno, $errstr); 
    if (!$fp) { 
    $result = "Error: could not open socket connection"; 
    } 
    else { // get the welcome message fgets ($fp, 1024); // write the user string to the socket 
    fputs($fp, $message); // get the result $result .= fgets ($fp, 1024); // close the connection 
    fputs ($fp, "END"); 
    fclose ($fp); // trim the result and remove the starting ? 
    $result = trim($result); 
    $result = substr($result, 2); // now print it to the browser 
    } ?> 
    Server said: <? echo $result; ?> 
+3

Ceci est un exemple comment créer un serveur tcp, pas comment se connecter à un ... –

Questions connexes