我正在编写一个简单的php套接字代码 这是我的代码
<?php
$address="127.0.0.1";
$port=9875;
echo "I am here";
if(false==($socket= socket_create(AF_INET,SOCK_STREAM, SOL_TCP)))
{
echo "could not create socket";
}
socket_bind($socket, $address, $port) or die ("could not bind socket");
socket_listen($socket);
if(($client=socket_accept($socket)))
echo "client is here";
?>
当我运行此程序时,我的浏览器只显示等待localhost
我的代码有问题吗?
我使用的是xammp 1.7.4
如果我想获得HTTP或FTP请求,我想知道另一件事我是否只更改了端口号?
答案 0 :(得分:6)
我验证了代码并在我的系统中进行了测试,它运行正常。在运行客户端后显示为“客户端在这里”。
文件名:server.php
<?php
$address="127.0.0.1";
$port=9875;
echo "I am here";
set_time_limit (0);
if(false==($socket= socket_create(AF_INET,SOCK_STREAM, SOL_TCP)))
{
echo "could not create socket";
}
socket_bind($socket, $address, $port) or die ("could not bind socket");
socket_listen($socket);
if(($client=socket_accept($socket)))
echo "client is here";
socket_close($socket);
?>
首先运行server.php文件。
文件:client.php
<?php
$host="127.0.0.1" ;
$port=9875;
$timeout=30;
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
if (!is_resource($sk)) {
exit("connection fail: ".$errnum." ".$errstr) ;
} else {
echo "Connected";
}
?>
现在运行client.php
你的输出应该是这样的(就像我在我的系统中那样)
我在这里是客户在这里
如果没有,请确保您的防火墙没有阻止该请求。如果你有防病毒软件,暂时禁用它。
答案 1 :(得分:3)
这是等待的预期行为。 你编写的程序是一个套接字服务器,它准备好侦听与指定端口的连接,直到它等待。
您可以创建一个连接的客户端,以便您看到响应“客户端在这里”。客户端可以是任何编程语言,包括PHP。
下面是PHP中的示例代码(我没有验证它)。
$fp = stream_socket_client("127.0.0.1:9875", $errno, $errstr);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
// Handle code here for reading/writing
}
您可以在PHP中查看this link示例客户端代码。
修改强>
$host = "127.0.0.1";
$port = 9875;
$timeout = 30;
$sk = fsockopen($host, $port, $errnum, $errstr, $timeout);
if (!is_resource($sk)) {
exit("connection fail: " . $errnum . " " . $errstr);
} else {
echo "Connected";
}