在我的public_html目录中的共享主机帐户上,我有一个php文件,其中包含用于创建套接字服务器的代码。
<?php
set_time_limit(0);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$ret = socket_bind($sock, 'localhost', 80);
$ret = socket_listen($sock);
$msgsock = socket_accept($sock);
socket_write($msgsock, " hello");
?>
当我用浏览器打开php文件或将其作为命令运行时,套接字服务器等待客户端连接,然后代码应该向客户端发送“hello”并完成执行。我知道实际的套接字服务器必须有一个循环,以便它可以正常工作,但这段代码只是用于测试。同样在public_html中我有一个php文件,它是一个客户端,
<?php
set_time_limit(0);
$mysocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($mysocket, 'localhost', 80);
if ($result === false) {
echo "error";
} else {
echo "successfully connected";
}
$input = socket_read($mysocket,1024);
echo $input;
?>
当我在浏览器中打开它时,即使php服务器文件没有运行,它也能成功连接到端口80上的localhost。但是当php服务器文件正在运行并等待客户端连接时,即使客户端文件成功连接到localhost,它仍会继续运行,尽管没有收到“hello”。当我使用apache服务器在我的计算机上尝试相同的事情并通过Internet从另一台计算机运行这些文件时,它可以工作,即服务器文件接受客户端,发送“hello”并完成执行。那么,php套接字服务器不能对我的共享主机帐户上的客户端连接做出反应的原因是什么? 提前致谢
答案 0 :(得分:1)
使用80以外的端口进行监听。它可能无法创建服务器,因为Web服务器正在端口80上运行。