socket通信 php作为客户端,C++作为服务端通信问题。。。 socket通信phpc++服务器 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 php 与 C++ 的json encode是不同的,这里要处理一下。 php 将收取到的所有数据都做个日志方便调试.先确认是否没有收到信息 我还没有做json的解析,现在只是想把json串整个弄下来,但是也出不来 $out = socket_read($socket,8192) 我要是将这句8192改成1的话就能读出9个字符,但是读不全 找到了socket_read 的错误,但是没有错误提示。有没有和socket_read功能类似的函数?socket_recv我也试过。。不行 while( ($out = socket_read($socket,8192))!== false){}这里先去掉因为读到空格字符的因素 while(true) { $out = socket_read($socket,8192);socket_read 会返回收到的任何数据,包括空串因此你不要不断的去读,而不是读一次就结束当然由于循环变成了死循环后,你需要做一个跳出循环的约定 恩,我作了跳出循环的约定,就是要把socket_read($socket,8192)改成socket_read($socket,1)才能读,而且读的支离破碎,请这到底是为什么。 你没有明白我的意思!socket_read 是不能作为循环终止的条件的比如 while(socket_read($socket,1)),一旦读到 php 认为是“空”的字符(empty 返回真的那些字符)时就会终止循环,造成数据不全而 while(socket_read($socket,8192)) 时,如果一直没有收到终止符 \0、\r、\n 则永远停在等待输入的情况下当然也有可能一开始就读到上一轮剩余的空字符,而根本进不了循环体既然你在循环结束后有 echo "关闭SOCKET...\n";不妨改作 echo "$out 关闭SOCKET...\n";看看能输出什么 我明白你的意思,我把代码改成了这样,但是就像我说的,只有$out=socket_read($socket,1);才行,如果$out=socket_read($socket,8192)就是死循环,一直等待,什么都输出不了。。即使之前的那些输出信息也是输出不了的do { $out=socket_read($socket,1); $data.=$out;}while(true);echo $data; do { $out=socket_read($socket,8192); if($out=="E") break; $data.=$out;}while(true);echo $data;刚才代码粘错了,应该是这样的,我在服务端加了一个字符串最后加了字母E 那不就是 如果一直没有收到终止符 \0、\r、\n 则永远停在等待输入 的情况了这说明服务端没有发送结束符(也就是没有遵守约定)你也只能连接 socket_read($socket,1) 的结果了其实读一块和读一个字节的效率是一样的(都是从输入缓冲区读的) 如何处理字节流?急!!! 怎么转移mysql数据库? smarty模板中的单选按钮的问题 编码问题!GB2312编码是否存在生僻字能否识别问题! 谁二次开发过UCenter div问题,各位帮个忙 高分求一段js代码 mysql存储进程几问——循环流程和变量使用范围、二次使用游标等 初尝PHP就碰壁,,帮帮忙 PHP 4.2.x 在windows 2000 CGI模式下最基础的东东错误! 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) 的结果了
其实读一块和读一个字节的效率是一样的(都是从输入缓冲区读的)