如题, 418887542 如有高手者,忘赐教,不甚感激。
 
 c++做客服端,php做socket服务端。因为需要多个c++同时访问php服务端。我设计的是单线程。不能满足要求。//header('content-type: text/html; charset=utf8');
/*************可以修改()***************8*********/
// 设置一些基本的变量
$host = "192.168.1.103";
$port = 1124;
/*************************************************/error_reporting(0);
ob_implicit_flush();// 设置超时时间
set_time_limit(0);
$is = true;
ignore_user_abort($is);//设置appid
$appid =99;
if(!extension_loaded('php_socket'))
{
dl('php_sockets.dll');
}
//mysq连接
$link = mysql_connect('localhost','root','root');//选择数据库
mysql_select_db('databank',$link);//设置字符编码为utf8
mysql_query("SET NAMES 'utf-8'");
/**
 * *****************************************************************************************
 * s        o              a               p      开始
 * *********************************************** *******************************************
 */
// 创建一个Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
//$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket,SOL_SOCKET,SO_REUSEADDR,1);
//socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>300, "usec"=>0));  
if($socket)
{
fputs(fopen('ok.php','a+'),"\r\nstart **r\n".date("y-m-d,H:i:s",time())."socket_create成功 \r\n");
}
else
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_create失败 \r\n");
}
//绑定Socket到端口
$bind = socket_bind($socket, $host, $port);
if($bind)
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_bind成功 \r\n");
}
else
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_bind失败 \r\n");
}// 开始监听链接
$result = socket_listen($socket, 3);//非阻塞模式(不可用???)
//socket_set_nonblock($socket);if($result)
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_listen成功 \r\n");
}
else
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_listen失败 \r\n");
}$time1 = time();
//循环接受请求 并处理
do{

// accept incoming connections
// 另一个Socket来处理通信
$spawn = socket_accept($socket);
if($spawn)
{
fputs(fopen('ok.php','a+'),socket_getpeername($socket).date("y-m-d,H:i:s",time())."socket_acceptyyyyyyy成功 \r\n");
}
else
{
fputs(fopen('ok.php','a+'),socket_getpeername($socket).date("y-m-d,H:i:s",time())."socket_accept失败 \r\n");
continue;
} // 获得客户端的输入
$input = socket_read($spawn, 2048);
while (!strpos($input,'</soap:Envelope>'))
{
$c = socket_read($spawn,2048) or die("错误:不能接受到返回数据3\n");
fputs(fopen('ok.php','a+'),"\r\n*******(没有结束)第三次接受的数据开始*** \r\n".$re."\r\n*******(没有结束)第三次接受的数据结束*** \r\n");
$input .= $c;
} //将输入结果写入ok.php
if($input)
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_read,数据为:".$input."\r\n");
}
else
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_read失败 \r\n");
}    $output = @get_response($input);
//处理客户端输入并返回结果
/* $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ClientLoginAPPResponse xmlns=\"http://tempuri.org/\"><GetClientLoginAPPResult><UserInfo><m_Uid>1</m_Uid><m_AppID>99</m_AppID></UserInfo><m_ResultCode>0</m_ResultCode></GetClientLoginAPPResult></ClientLoginAPPResponse></soap:Body></soap:Envelope>";*/ $length = strlen($output);
$header = "HTTP 200 OK  Content-Type: text/xml; charset=utf-8 Content-Length: ".$length; $postdata = $header."\r\n\r\n".$output;
$write = socket_write($spawn,$postdata, strlen($postdata)) or die("Could not write  output\n"); if($write)
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_write成功,数据为: \r\n".$header.$output."\r\n"); }
else
{
fputs(fopen('ok.php','a+'),date("y-m-d,H:i:s",time())."socket_write失败 \r\n");
} // 关闭sockets socket_close($spawn);
   $time2= time();
   if($time1+30<$time2)
   {
     echo "<script>window.location.href = 'se.php'</script>";
   }
}while(true);
socket_close($socket);/**
 * *****************************************************************************************
 * s        o              a               p      结束
 * *********************************************** *******************************************
 */