服务器端文件:socket_server.php:
<?php
phpinfo();//用WEB打开的时候为了防止网页超时连接,需要设置无限有效
set_time_limit(0); 
/**加载Socket必备的库*/
if(!extension_loaded('sockets')) {
if(strtoupper(substr(PHP_OS, 3)) == “WIN”) {
dl('php_sockets.dll');
}else{
dl('sockets.so');
}
} /**---socket服务器端生成---*/
$commonProtocol = getprotobyname("tcp");//使用公共协议名字来获取一个协议类型 
$socket = socket_create(AF_INET,SOCK_STREAM,$commonProtocol);//产生一个socket并且返回一个socket资源的实例 
socket_bind($socket, 'localhost', 1339);//绑定socket到本地计算机
socket_listen($socket);//监听所有进来的socket连接 
/**------END------*///初始化缓冲区
$buffer='NO DATA';
while(true){
//产生一个连接
$connection = socket_accept($socket);//其实是一个循环等待的过程
if($connection){
printf("Socket connected\r\n");
socket_write($connection, "You are connecting me,My Load.");
} else{
echo socket_strerror();
exit;
}//检测缓冲区的内容,有内容就发,没有内容就不发
if($buffer!=""){
printf("Something is in the buffer...sending data...\r\n");
socket_write($connection,$buffer.";");//将缓冲区内容发送到客户端
printf("Wrote to socket\r\n");
}else
{
printf("No Data in the buffer\r\n");
}//从客户端取得输入数据并把读取的数据放进缓冲区中
while($data = socket_read($connection,1024))//socket_read() 读取指定长度的数据 
{
$buffer = $data;
socket_write($connection,"Information Received\r\n");
printf("Buffer".$buffer."\r\n");
}
//关闭socket连接
socket_close($connection);
printf("Closed the soket\r\n\r\n");
}
?>客户端文件:socket_client.php:
<?php
// Create the socket and connect
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket,'localhost', 1339);while(($buffer = socket_read($socket, 10,PHP_BINARY_READ))!==false) {
if($buffer == "NO DATA") {
echo("<p>NO DATA</p>");
break;
}else{
// Do something with the data in the buffer
echo("<p>Buffer Data: " . $buffer . "</p>");
}
}echo("<p>Writing to Socket</p>");
// Write some test data to our socket
if(!socket_write($socket, "SOME DATA")){
echo("<p>Write failed</p>");
}
// Read any response from the socket
while(($buffer = socket_read($socket, 10,PHP_BINARY_READ))!==false){
echo("<p>Data sent was: SOME DATA<br> Response was:" . $buffer . "</p>");
}
echo("<p>Done Reading from Socket</p>");
?> 
然后用php.exe在命令行执行:
客户端无法正常显示全部应该显示的信息:
"<p>Done Reading from Socket</p>"这个样的最后一句话也没有显示.
好像是在第一个循环的时候卡在socket_read()函数上了,当服务器端没有数据的时候,原本以为应该是返回false但是却在一点反映也没有了,程序也不往下走了,好像在socket_read中有一个无限循环一样,怎么回事!我参考了php文档,有的说返回的是"",有的例子程序说是false,没有办法了,求助,上面的现象是怎么回事?
我的环境是WindowsXP,apache,php5