今日试着写一个PHP与C言语经过socket通讯的程序,看过PHP手册,发现有好几种办法能够树立socket客户端.
1、经过fsockopen()树立socket衔接,然后用用fputs()发送音讯,用fgets()接纳音讯。
2、经过socket_create()树立socket衔接,然后用socket_send()orsocket_write()发送音讯,用socket_recv()orsocket_read()发送音讯。
很古怪,我在手册上看到了这样一段话本扩展模块是实验性的。该模块的行为,包含其函数的称号以及其它任何关于此模块的文档或许会在没有告诉的状况下随PHP今后的发布而改动。咱们提示您在运用本扩展模块的一起自担风险。看来php4.0socket通讯还不是彻底安稳。
今日我写的客户端要与服务端做两次通讯,我用上面这个办法都写了一个客户端程序,发现当仅仅就一次通讯的时分,也便是PHP客户端发送一次音讯,然后接纳回来音讯,就封闭衔接。这两种办法都能正确快速的完结功用,但作为两次通讯时,却有显着的不同,榜首种办法榜首次通讯特别快就完毕了,这个我能够经过服务端的输出看出来,可是第2次通讯要等上好几分钟才干完毕,我试了好几次都这样,我不太清楚我的程序哪里出错了,仍是这个办法衔接便是有问题,可是第二种办法做这两次通讯却很快,正确!完结的十分的。
最终我依据第二种状况写了一个class
//////////////////////////////FileDescription//////////////////////////////////////////
//ClassName:socket
//Version:V1.0
//FunctionalOutline:createsocket,andsendmessagetoserver
//Revisionhistory:2004/12/15Firstversioncreated
//Current:2004/12/15LiuYongsheng
//////////////////////////////////////////////////////////////////////////////////////////
classsocket{
var$socket整站优化计划";//socket句柄
var$sendflag=>>>;
var$recvflag=<<微博营销东西"<;
var$response;
var$debug=1;
functionsocket($hostname,$port){
$address=gepostbyname($hostname);
$pis->socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$result=socket_connect($pis->socket,$address,$port);
if($pis->debug==1){
if($result<0){
echosocket_connect()failed.\nReason:($result).socket_strerror($result).
;
}else{
echoconnectOK.
;
}
}
}
functionsendmsg($msg){
socket_write($pis->socket,$msg,strlen($msg));
$result=socket_read($pis->socket,100);
$pis->response=$result;
if($pis->debug==1){
printf(%s$msg
,$pis->sendflag);
printf(%s$result
,$pis->站优化事例"recvflag);
}
return$result;
}
functionclose(){
socket_close($pis->socket);
}
}
;本文来自:络营销蜓云tingclouds