2012-12-29 38 views
9

我需要實現我的網站上一個PHP腳本,將做到以下幾點:通過PHP腳本連接到TCP/IP服務器

  1. 連接到遠程服務器
  2. 發送數據包到服務器

一切都已經可配置在服務器端對數據包請求作出響應的服務器接收數據包,我只需要弄清楚如何使用PHP連接到TCP/IP服務器。

任何想法的方向看?

+1

套接字編程爲w你在找你...? –

+0

你的意思是類似於在終端上給「ping」命令,想用PHP來實現嗎? –

+0

PHP手冊是正確的開始方向。 http://php.net/manual/en/function.fsockopen.php –

回答

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

更多 - http://php.net/manual/en/function.fsockopen.php

+0

嘗試它,它的工作方式 - 我看到那裏是服務器日誌中的新連接。但是,該頁面表示已超時。你有什麼想法,爲什麼它可能是這樣嗎? –

+0

@John也許你的服務器沒有關閉連接,所以'feof'不會返回true? –

+0

對不起,但我得到一個'連接拒絕(61)',即使在服務器端通過ufw打開端口後。 – 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服務器

$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

這是示例如何創建tcp服務器,而不是如何連接到一個... –