【PHP】实现socket客户端连接,并解析服务端返回的json数据

/**
 *
 * @param int $lastnum
 * @param ArrayObject $arrry
 * @return number
 */
function get_Result(int $lastnum, ArrayObject &$array)
{
    $isDebug = FALSE; /* TRUE-debug FALSE-not debug */


    /* 变量定义 */
    $sBuf = '';
    $sSendBuf = ''; /* 上送报文 */
    $sTrxCode = ''; /* 交易码 */
    $sType = ''; /* 渠道类型 */
    $sSeqNo = ''; /* 流水号 */
    $sDate = ''; /* 日期 */
    $sTime = ''; /* 时间 */
    /* body */
    $sBeginNo = ''; /* 开始期数 */
    $sEndNo = ''; /* 结束期数 */

    /* 初始化 */
    date_default_timezone_set ('PRC'); // 或修改php.ini中的;date.timezone = 为date.timezone = "Asia/Shanghai"
    $sTrxCode = 'SSQ1001';
    $sType = 'PHP';
    $sDate = date ('Ymd');
    $sTime = date ('His');
    $sSeqNo = $sType . $sDate . $sTime;

    if ($isDebug)
    {
        printf ("sBuf[%s]\n", $sTrxCode);
        printf ("sType[%s]\n", $sType);
        printf ("sDate[%s]\n", $sDate);
        printf ("sTime[%s]\n", $sTime);
        printf ("sSeqNo[%s]\n", $sSeqNo);
    }
    /* 组织报文 */
    $sBuf = sprintf ('%8s%6s%20s%8s%6s%5d%7s%7s', $sTrxCode, $sType, $sSeqNo, $sDate, $sTime, $lastnum, $sBeginNo, $sEndNo);
    $sSendBuf = sprintf ('%06d%s', strlen ($sBuf), $sBuf);

    if ($isDebug)
    {
        printf ("sBuf[%s]\n", $sBuf);
        printf ("sSendBuf[%s]\n", $sSendBuf);
    }

    /* 创建socket */
    $socket = socket_create (AF_INET, SOCK_STREAM, 0);
    // socket_connect($socket, "127.0.0.1", 31001);
    /* 连接服务端 */
    socket_connect ($socket, "192.168.121.140", 31001);
    /* 发送报文 */
    socket_write ($socket, $sSendBuf, strlen ($sSendBuf));
    /* 接收报文长度 */
    $sRecvLen = socket_read ($socket, 6);
    if ($sRecvLen == NULL || strlen ($sRecvLen) < 6)
    {
        printf ("recvlen error[%d]", strlen ($sRecvLen));
        return -1;
    }
    $iRecvLen = (int)$sRecvLen;

    if ($isDebug)
    {
        printf ("iRecvLen[%d],sRecvLen[%s]\n", $iRecvLen, $sRecvLen);
    }
    /* 接收报文内容 */
    $iReadLen = 0; /* 已读字节长度 */
    $sRecvBuf = '';
    while ($iReadLen < $iRecvLen)
    {
        $sBuf = '';
        $sBuf = socket_read ($socket, 2000); /* 每次读取2000字节 */

        if ($isDebug)
        {
            printf ("sBuf[%6d][%s]\n", strlen ($sBuf), $sBuf);
        }
        $iReadLen += strlen ($sBuf);
        $sRecvBuf .= $sBuf;
    }
    if (strlen ($sRecvBuf) != $iRecvLen)
    {
        printf ("sRecvBuf[%d] iRecvLen[%d]", strlen ($sRecvBuf), $iRecvLen);
        return -3;
    }

    $sRes = substr ($sRecvBuf, 48);
    if ($sRes == NULL)
    {
        printf ("substr error\n");
        return -5;
    }
    if ($isDebug)
    {
        // printf ("\nsRes[%6d][%s]\n", strlen($sRes), $sRes);
        printf ("sRes[>%s<]\n", $sRes);
    }
    /* 解析json结构体 */
    $JonRes = json_decode ($sRes, true);
    // $JonRes = json_decode ($sRes);/* true 返回array,默认或false返回object */
    // var_dump($jsonres);
    if ($JonRes == NULL)
    {
        printf ("json_decode error");
        return -4;
    }
    if ($isDebug)
    {
        printf ("lottery_no count[%d]\n", count ($JonRes ['result'] ['reslist']));
    }
    // var_dump($array);
    $array = $JonRes ['result'] ['reslist'];

    // var_dump($array);
    // printf("lottery_no[%s]\n", $jsonres['result']['reslist'][0]['lottery_no']);
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值