我需要构建一个简单的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。
答案 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中作为客户端进行连接。