php socket_read()函数的问题
来源:互联网 发布:金山软件 财报 编辑:程序博客网 时间:2024/06/15 07:33
服务器端文件: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
<?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
- php socket_read()函数的问题
- socket_read的问题!!!!!---引用
- php socket_recv 和 socket_read
- PHP中的socket_read和socket_recv区别详解
- PHP的floor函数问题。
- php scandir函数,print_r函数的问题
- php的mail()函数出错的问题
- 关于php的chmod函数的问题
- php的trim函数遇到的问题
- php之mail函数遇到的问题
- php中的一个时间函数引发的问题
- php中mkdir()函数的权限问题
- PHP构造函数的继承问题
- php中mkdir()函数的权限问题
- PHP uniqid函数执行缓慢的问题
- php中mkdir()函数的权限问题
- 关于PHP header函数跳转的问题
- php中mkdir()函数的权限问题
- 【PB】pb9中COM的创建和调用
- 2012-7-18 周三 总结
- 跨专业,十年规划,这个可以有
- OpenGL ES着色器语言之构造器(Constructor)
- js 删除table
- php socket_read()函数的问题
- 常用脚本命令集
- startx启动过程分析
- system center operation manager 2007 R2 performance counter viewer
- 【PB】获取任意月份的最后一天
- 浅析Spring AOP原理
- 数据结构:多项式链表的操作
- c++容器(vector、list、deque)
- 嵌套触发器