php socket如何连续接收多个tcp包 php socket如何连续接收多个tcp包 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个tcp包只有1.4k左右(有说新版协议中可达64k),socket本身就是对tcp包连续操作了底层协议不需要考虑,况且在php层面你也触碰不到 可是如果服务器连续发送3个以上的包,用php写客户端只接受到返回的前两个包。就收不到后面的包 <?php $fp = stream_socket_client("tcp://192.168.0.154:4567", $errno, $errstr, 15);if (!$fp) { echo "$errstr ($errno)<br />\n";} else { // fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); //while (!feof($fp)) { // echo fgets($fp, 1024); //} //fclose($fp); /*$out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com2\r\n"; $out .= "Connection: Close\r\n\r\n";*/ $usVer=1; //版本 $usMajorComm=34; //主命令 $usMinorComm=4; //次命令 $usDataLen; $uPushID=1123; $uAppID=123; $usClientIDNum=100; $usExpireTime=7200; $usMsgLen=123; //$char='asdf'; $SPushCommandStruct=pack("L2S3",$uPushID,$uAppID,$usClientIDNum,$usExpireTime,$usMsgLen); //$out=pack("V",$uPushID); $usDataLen=strlen($SPushCommandStruct); echo $usDataLen; $SCommHdrStruct=pack('S4',$usVer,$usMajorComm,$usMinorComm,$usDataLen); $out=$SCommHdrStruct; $outlen=strlen($out); fwrite($fp,$out,$outlen); stream_set_timeout($fp, 15);for($i=0;$i<4;$i++){ stream_set_blocking($fp,1); echo $i; echo "<br/>"; $res=fread($fp,16); echo strlen( $res ); $res3=unpack("SusVer/SusMajorComm/SusMinorComm/SusDataLen",$res); var_dump($res3); stream_set_blocking($fp,0);} fclose($fp);}服务器上原包返回4个 你一次读16个字节,4次供64个字节。这只是一个tcp包的内容,哪来的4个包?tcp 在传输前会等待后续数据数据直到缓冲区慢或数据结束,然后才发送 字符串替换,如何能做到双向替换? php rand(1,2)概率是各占50%吗? 如何根据一年中的第几周 得到 这周的每个日期 vertrigoserv安装后报如下错误 php怎样才能得到12位的唯一字串(不可逆) 求初学正则表达式弱智问题 关于php文章分页 关于网站制作方面的英语文章 请问如何通过链接传参数? 求个正则表达式 批量插入数据到mysql数据库 mysql数据库中sql语句问题!
底层协议不需要考虑,况且在php层面你也触碰不到
$fp = stream_socket_client("tcp://192.168.0.154:4567", $errno, $errstr, 15);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
// fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
//while (!feof($fp)) {
// echo fgets($fp, 1024);
//}
//fclose($fp);
/*$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com2\r\n";
$out .= "Connection: Close\r\n\r\n";*/
$usVer=1; //版本
$usMajorComm=34; //主命令
$usMinorComm=4; //次命令
$usDataLen; $uPushID=1123;
$uAppID=123;
$usClientIDNum=100;
$usExpireTime=7200;
$usMsgLen=123;
//$char='asdf';
$SPushCommandStruct=pack("L2S3",$uPushID,$uAppID,$usClientIDNum,$usExpireTime,$usMsgLen);
//$out=pack("V",$uPushID);
$usDataLen=strlen($SPushCommandStruct);
echo $usDataLen;
$SCommHdrStruct=pack('S4',$usVer,$usMajorComm,$usMinorComm,$usDataLen);
$out=$SCommHdrStruct;
$outlen=strlen($out);
fwrite($fp,$out,$outlen); stream_set_timeout($fp, 15);for($i=0;$i<4;$i++)
{
stream_set_blocking($fp,1);
echo $i;
echo "<br/>";
$res=fread($fp,16);
echo strlen( $res );
$res3=unpack("SusVer/SusMajorComm/SusMinorComm/SusDataLen",$res);
var_dump($res3);
stream_set_blocking($fp,0);
}
fclose($fp);
}服务器上原包返回4个