快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

PHP SOCKET 技术研究

  今天试着写一个 PHP 与 C 语言通过socket通讯的程序,看过PHP手册,发现有好几种方法可以建立socket 客户端.

  1、通过 fsockopen() 建立socket连接,然后用 用fputs() 发送消息,用 fgets() 接收消息。

  2、通过 socket_create() 建立 socket 连接,然后用 socket_send() or socket_write() 发送消息,用 socket_recv() or socket_read() 发送消息。

  很希奇,我在手册上看到了这样一段话"本扩展模块是实验性的。该模块的行为,包括其函数的名称以及其它任何关于此模块的文档可能会在没有通知的情况下随 PHP 以后的发布而改变。我们提醒您在使用本扩展模块的同时自担风险。" 看来 php4.0 socket通讯还不是完全稳定。

  今天我写的客户端要与服务端做两次通讯,我用上面这个方式都写了一个客户端程序,发现当仅仅就一次通讯的时候,也就是PHP客户端发送一次消息,然后接收返回消息,就关闭连接。这两种方式都能准确迅速的实现功能,但当做两次通讯时,却有明显的差别,第一种方式第一次通讯特殊快就结束了,这个我可以通过服务端的输出看出来,但是第二次通讯要等上好几分钟才能结束,我试了好几次都这样,我不太清晰我的程序哪里出错了,还是这个方法连接就是有问题,但是第二种方式做这两次通讯却很快,准确!完成的异常的。

  最后我根据 第二种情况写了一个 class

  ////////////////ile Description ////////////////////
  //Class Name : socket
//Version: V1.0
//Functional Outline: create socket,and send message to server
//Revision history: 2004/12/15 First version created
//  Current : 2004/12/15 Liu ongsheng
///////////////////////////////////////////
class socket{
 var $socket; //socket 句柄
 var $sendflag = ">>>";
 var $recvflag = "<<<";
 var $response;
 var $debug = 1;
 function socket($hostname,$port){
  $address = gethostbyname($hostname);
  $this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
     $result =  socket_connect($this->socket,$address,$port);
  if($this->debug == 1){
   if ($result < 0) {
      echo "socket_connect() failed.nReason: ($result) " . socket_strerror($result) . "<br>";
   } else{
      echo "connect OK.<br>";
   }
  }  
 }
 function sendmsg($msg){
  socket_write($this->socket,$msg,strlen($msg));
  $result  = socket_read($this->socket,100);
  $this->response = $result;
  if($this->debug == 1){
      printf("<font color=#CCCCCC>%s $msg</fon><br>",$this->sendflag);
      printf("<font color=blue>%s $result</font><br>",$this->recvflag);
  }
        return $result;
 }
 function close(){
  socket_close($this->socket);
 }

  }


返回类别: 教程
上一教程: 用PHP发电子邮件
下一教程: PHP网页计数器的原理

您可以阅读与"PHP SOCKET 技术研究"相关的教程:
· PHP关于简朴的页面缓冲技术
· 在PHP中用Socket发送电子邮件(三)
· 搜索引擎技术核心揭密(PHP)
· 高级PHP V5 对象研究
· 在PHP中用Socket发送电子邮件(二)
    微笑服务 优质保证 索取样品