2012-12-29 3 views
9

Ich brauche einen PHP-Skript auf meiner Website zu implementieren, die folgende tun würden:an einen TCP/IP-Server über PHP-Skript Connecting

  1. Verbindung zu einem Remote-Server
  2. Senden Paket an den Server
  3. Paket empfängt von dem Server

Alles schon auf der Serverseite konfiguriert ist, um Paketanforderungen reagieren zu können, brauche ich nur, um herauszufinden, wie pHP zu verwenden, um TCP/IP-Server zu verbinden.

Irgendwelche Ideen in welche Richtung zu schauen?

+1

Socket-Programmierung ist w Du suchst nach ...? –

+0

meinst du ähnlich wie geben "ping" -Befehl im Terminal, will mit PHP zu implementieren? –

+0

PHP Handbuch ist richtige Richtung zu starten. http://php.net/manual/en/function.fsockopen.php –

Antwort

16

leicht mit PHP Buchsen verbinden:

<?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); 
} 
?> 

Lesen mehr - http://php.net/manual/en/function.fsockopen.php

+0

Versuchte es und es funktioniert in gewisser Weise - ich sehe das dort ist eine neue Verbindung im Serverprotokoll. Die Seite besagt jedoch, dass eine Zeitüberschreitung aufgetreten ist. Hast du eine Idee, warum es so sein könnte? –

+0

@John Vielleicht schließt Ihr Server die Verbindung nicht, so dass "feof" nicht wahr zurückgibt? –

+0

Sorry für die Beule, aber ich bekomme eine 'Connection Refused (61)', auch nach dem Öffnen der Ports über 'ufw' auf dem Server-Ende. – 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

TCP Server

$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

Dies ist ein Beispiel, wie TCP-Server zu erstellen, nicht, wie man eine Verbindung zu ... –

Verwandte Themen