最近公司对接一个三方银行接口,获取到的返回数据总是不全,导致判断异常,搜了很多最后整理代码如下:
如各位大神有更好的解决方法麻烦指点一下…
var_dump(sendSocketMsg(“127.0.0.1″,”9527″,”are u ok”));
function sendSocketMsg($host, $port, $xml)
{
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) return false;
$result = @socket_connect($socket, $host, $port);
//socket_set_nonblock ($socket);
if ($result == false) return false;
socket_write($socket, $xml);
$ret2 = socket_read($socket, 2048, PHP_BINARY_READ);
//var_dump(socket_read($socket, 2048, PHP_BINARY_READ));
/*
while ($ret1 = socket_read($socket, 2048, PHP_BINARY_READ)) {
$ret2 .= $ret1;
}*/
return $ret2;
}
其他
<?php
date_default_timezone_set(“Asia/Shanghai”);
//include_once “Db.php”;
$sfd = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sfd, “127.0.0.1”, 9588);
socket_listen($sfd, 10); //监听10个
socket_set_option($sfd, SOL_SOCKET, SO_REUSEADDR, 1); //重用端口
socket_set_nonblock($sfd); //非阻塞
$rfds = array($sfd);
$wfds = array();
do{
$rs = $rfds;
$ws = $wfds;
$es = array();
$ret = socket_select($rs, $ws, $es, 3);
//read event
foreach($rs as $fd){
if($fd == $sfd){
$cfd = socket_accept($sfd);
socket_set_nonblock($cfd);
$rfds[] = $cfd;
echo “new client coming, fd=$cfd\n”;
}else{
//获取客户端IP地址
socket_getpeername($fd, $addr, $port);
//读取客户端信息
$msg = socket_read($fd, 1024);
echo date(“H:i:s”).” $fd $msg\n”;
$arr=explode(“,”, $msg);
//更新到数据库
//$sql = “update test set wendu = $arr[0],shidu = $arr[1], green = $arr[2],yellow=$arr[3] ,red=$arr[4],dianliu=$arr[5],             dianya=$arr[6] where ip = ‘$addr'” ;
//Db::query($sql);
}
}
}while(true);
 
(文章今日已有 1 人访问,总访问量 12 ::>_<::)