解决方案 »
- PHP嵌入开发页面无显示,求大神帮助。
- 为什么 文件域内容无法显示?
- 请高手帮忙看一下,为什么这个循环只执行一次就不执行了
- 如何向http发送post请求
- 新手问查询数据库
- FCKeditor的图片上传问题哪位老大能解决啊?FCKeditor的图片上传问题哪位老大能解决啊?FCKeditor的图片上传问题哪位老大能解决啊?
- 如何将图片背景(白色)设为透明,然后合并到另一张图片中去,代码怎么讲?100分
- 有谁用过PHPED,应该怎么配置??
- 当我点击一个下拉列表内容,另一个下拉列表的内容会相应改变,应该怎样用PHP做?
- 送分题!
- php无法操作memcache求助
- 怎样使用php获取复杂json数据并输出
}
这里先去掉因为读到空格字符的因素
$out = socket_read($socket,8192);socket_read 会返回收到的任何数据,包括空串
因此你不要不断的去读,而不是读一次就结束当然由于循环变成了死循环后,你需要做一个跳出循环的约定
socket_read 是不能作为循环终止的条件的
比如 while(socket_read($socket,1)),一旦读到 php 认为是“空”的字符(empty 返回真的那些字符)时就会终止循环,造成数据不全
而 while(socket_read($socket,8192)) 时,如果一直没有收到终止符 \0、\r、\n 则永远停在等待输入的情况下
当然也有可能一开始就读到上一轮剩余的空字符,而根本进不了循环体既然你在循环结束后有 echo "关闭SOCKET...\n";
不妨改作 echo "$out 关闭SOCKET...\n";
看看能输出什么
do {
$out=socket_read($socket,1);
$data.=$out;
}while(true);
echo $data;
$out=socket_read($socket,8192);
if($out=="E") break;
$data.=$out;
}while(true);
echo $data;
刚才代码粘错了,应该是这样的,我在服务端加了一个字符串最后加了字母E
这说明服务端没有发送结束符(也就是没有遵守约定)
你也只能连接 socket_read($socket,1) 的结果了
其实读一块和读一个字节的效率是一样的(都是从输入缓冲区读的)