各位朋友:
我正在尝试用PHP编写一个简单的套接字示例。下面的代码看起来工作正常:
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if( !socket_bind($sock, "127.0.0.1" , 5000) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
if(!socket_listen ($sock , 10))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode] $errormsg \n");
}
echo "Socket listen OK \n";
echo "Waiting for incoming connections..... \n";但是当我添加行$client = socket_accept($sock);作为下一步,我的应用程序保持在加载状态大约5分钟,并且失败了!
我研究了一些东西,但我找不到任何线索,更不用说解决方案了。
谢谢!
发布于 2014-02-25 00:20:08
来自socket_accept()的文档
如果没有挂起的连接,socket_accept()将阻塞,直到出现连接为止。
您是否有任何尝试连接到应用程序的内容?如果不这样做,socket_accept()最终会因为default_socket_timeout而超时。
发布于 2014-02-25 00:23:23
这些是来自我的一个工作套接字脚本的代码片段。它很简单,但你会抓住要点的。
它是一个阻塞调用,除非你这样做:
@socket_set_nonblock($sock);然后循环不断地处理你的连接和它们发送的数据。
while(true){
if(($newc = @socket_accept($sock)) !== false) {
$con=1;
}
if($con==1){
//There is a socket. Read data from it, write data to it or close it here:
if($dataIn = socket_read($newc, 1024)){
echo "Client: " . $dataIn . "\r\n<BR>";
}
if($dataIn==""){
socket_close($newc);
return();
}
}
sleep(1);
}发布于 2014-04-30 11:07:27
尝试在CLI上运行脚本。应该像你想要的那样工作。在浏览器上运行它最终会导致超时。
https://stackoverflow.com/questions/21992927
复制相似问题