2012-12-29 19 views
9

trzeba zaimplementować skrypt php na mojej stronie internetowej, które należy wykonać następujące czynności:Łączenie się z serwerem TCP/IP za pomocą skryptu php

  1. Połącz się ze zdalnym serwerem
  2. Wyślij pakiet do serwera
  3. Odbierz paczkę z serwera

Wszystko jest już skonfigurowany po stronie serwera w odpowiedzi na żądania pakietów, tylko trzeba dowiedzieć się, jak korzystać z php do łączenia się z serwerem TCP/IP.

Jakieś pomysły w jakim kierunku wyglądać?

+1

programowanie jest w gniazdo czapka szukająca ...? –

+0

masz na myśli podobne do polecenia "ping" w terminalu, chcesz zaimplementować przez PHP? –

+0

Instrukcja PHP jest właściwym początkiem. http://php.net/manual/en/function.fsockopen.php –

Odpowiedz

16

Łatwo z gniazd 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); 
} 
?> 

Czytaj więcej - http://php.net/manual/en/function.fsockopen.php

+0

Próbowałem go i działa w pewien sposób - widzę, że to nowe połączenie w dzienniku serwera. Jednak strona mówi, że nastąpiło przekroczenie limitu czasu. Czy masz pojęcie, dlaczego tak się dzieje? –

+0

@John Może twój serwer nie zamyka połączenia, więc 'feof' nie zwraca true? –

+0

Przepraszamy za uderzenie ale otrzymuję 'Odmowę połączenia (61)', nawet po otwarciu portów przez 'ufw' na końcu serwera. – 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

podłączeniu do serwera 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

Oto przykład jak stworzyć serwer TCP, a nie jak połączyć się z jednym ... –

Powiązane problemy