2012-12-29 130 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服务器,而不是如何连接到一个... –