php tcp客户端 发送数据的时候加上4字节头,防止粘包

php tcp客户端 发送数据的时候加上4字节头,防止粘包

function sendMsgToBalance($id, $id_port){
        $port = 8000;
        $ip = "192.168.1.179";
        if(!empty($id) && !empty($id_port)) {
                $send_string = '123456789';
                $len = strlen($send_string);
                $header = pack("I*",$len);   //添加4字节
                $len = strlen($send_string);
                $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                if ($socket === false) {
                        echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
                        echo file_put_contents("test.txt","create faild....".$recv_url.date("Y-m-d H:i:s")."\n",FILE_APPEND );
                        exit;
                }else {
                        //echo "OK.\n";
                }
                socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>30, "usec"=>0 ) );  //设置发送接收超时
                socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>30, "usec"=>0 ) );

                $result = socket_connect($socket, $ip, $port);
                if ($result === false) {
                        echo "socket_connect() faild.\nReason: ($result) " . socket_strerror($result) . "\n";
                        file_put_contents("test.txt","connection faild....". date("Y-m-d H:i:s")."\n",FILE_APPEND );
                        socket_close($socket);
                        exit;
                }else {
                        //echo "连接OK\n";
                }

                if(!($ret_len = socket_write($socket,  $header.$send_string, strlen($send_string) + 4))) {
                        echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
                        file_put_contents("test.txt","send faild....".date("Y-m-d H:i:s")."\n",FILE_APPEND );
                        socket_close($socket);
                        //goto resend;
                        exit;
                }
                file_put_contents("test.txt","sendMessage start ".$send_string.date("Y-m-d H:i:s")."\n",FILE_APPEND );
                socket_close($socket);
        }else{
                error("hls监控参数错误!...");
        }
}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值