在远程套接字服务器中作为客户端连接

时间:2019-08-21 17:16:54

标签: php sockets websocket fsockopen

我需要构建一个简单的PHP服务套接字,以将其作为客户端与远程套接字服务器连接,然后进行lintening。问题是我需要连接主机URL,而不是主机IP。

我尝试使用socket_create()方法,但它仅使用IP进行连接。我尝试过的另一种方法是stream_socket_server(),它允许URL连接,但是我无法保持收听状态以接收响应。

echo "Socket started...\n";

$server = 'ssl://sockserver.com/moreurl/params?56298';
$host = "sockserver.com";
$port = 80;
set_time_limit(0);

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_connect($socket, $server, $port);
socket_bind($socket, $host);
socket_listen($socket);

while (true) {
  $result = socket_read ($socket, 1024);
  if($result){
    echo "Reply From Server  :".$result;
  }
}

socket_close($socket);

因此,我需要使用主机之类的URL继续监听作为PHP客户端的远程服务器Socket。

2 个答案:

答案 0 :(得分:0)

实际上,您需要使自己熟悉套接字编程……例如,您的$ address是一个URL-但是套接字不理解URL。您必须使用IP地址(对于AF_INET)或Unix套接字路径(对于AF_UNIX)。

我将为您提供2个脚本,一个非常基本的套接字服务器+套接字客户端...您可以随意使用它来做任何事情。

服务器:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($socket, '0.0.0.0', 9999);
if (socket_listen($socket)) {
    $nsocket = socket_accept($socket);

    $exit = false;
    while(!$exit && $s = socket_read($nsocket, 100)) {
        $s = trim($s);

        if ($s == 'quit') {
            $exit = true;
            $a = 'Bye';
        }
        else {
            echo 'Received "'.$s.'" from '.$nsocket . PHP_EOL;
            $a = 'You wrote "'.$s.'"';
        }

        socket_write($nsocket, $a."\n");
    }
    socket_write($nsocket, "Bye\n");
    socket_close($nsocket); 
}

客户:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($socket, '127.0.0.1', 9999);
echo '> ';
while( ($data = fgets(STDIN)) && trim($data) != 'quit') {

    if (strlen($data))
        socket_write($socket, $data);
    $answer = '';
    while($ret = socket_read($socket, 1)) { 
        $answer .= $ret;
        if ($ret == "\n") break;
    }
    echo '< '.$answer;
    echo '> ';
}

答案 1 :(得分:0)

O使用ratchetphp/Pawl library at Github解决了我的问题。该库允许在WSS中作为客户端进行连接。