亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4130 | 回復(fù): 0
打印 上一主題 下一主題

PHPTelnet類改進(jìn)分享及求教是否有非阻塞的phpTelnet實(shí)現(xiàn) [復(fù)制鏈接]

論壇徽章:
93
2015年辭舊歲徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年紀(jì)念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季節(jié)之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季節(jié)之章:冬
日期:2019-10-10 10:57:17CU大;照
日期:2014-02-21 14:22:52CU大;照
日期:2014-03-13 10:40:30CU大;照
日期:2014-02-21 14:23:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-03-05 15:15 |只看該作者 |倒序?yàn)g覽
有需求通過php來連接一些telnet服務(wù)器,網(wǎng)上找到了一個(gè)現(xiàn)成的實(shí)現(xiàn)代碼(附于最后),使用時(shí)發(fā)現(xiàn)會等待結(jié)果很久才返回,然后發(fā)現(xiàn)是獲取返回?cái)?shù)據(jù)的函數(shù)讀取socket使用了阻塞讀取固定長度1000的數(shù)據(jù),而返回的數(shù)據(jù)有時(shí)候并沒有這么多從而一直等到超時(shí)才返回,如下將函數(shù)做了改進(jìn)與大家分享:
  1.         function GetResponse(&$r) {
  2.             echo "Get response...\n";
  3.                 $r='';
  4.                 $unread_bytes = 1;
  5.                 do {
  6.                     var_dump($unread_bytes);
  7.                         $r.=fread($this->fp,$unread_bytes);
  8.                         $s=socket_get_status($this->fp);
  9.                         $unread_bytes = $s['unread_bytes'];
  10.                 } while ($s['unread_bytes']);
  11.         }
復(fù)制代碼
當(dāng)然,如果服務(wù)器連一個(gè)數(shù)據(jù)也沒有的話還是要阻塞。另外一個(gè)疑問,因?yàn)閠elnet服務(wù)器有時(shí)候會主動推送數(shù)據(jù)過來,而這個(gè)PHPTelnet類需要發(fā)送命令后才會等待輸出,使用這個(gè)代碼的話就不能及時(shí)得到了服務(wù)器推送的數(shù)據(jù)了。不知道大家有沒有好的方案來監(jiān)聽telnet服務(wù)器推送數(shù)據(jù)。我的打算是用socket_select的方式來改造這個(gè)類實(shí)現(xiàn)推送數(shù)據(jù)的監(jiān)聽。


  1. <?php
  2. /*
  3. PHPTelnet 1.1.1
  4. by Antone Roundy
  5. adapted from code found on the PHP website
  6. public domain
  7. */

  8. class PHPTelnet {
  9.         var $show_connect_error=1;

  10.         var $use_usleep=0;        // change to 1 for faster execution
  11.                 // don't change to 1 on Windows servers unless you have PHP 5
  12.         var $sleeptime=125000;
  13.         var $loginsleeptime=1000000;

  14.         var $fp=NULL;
  15.         var $loginprompt;

  16.         var $conn1;
  17.         var $conn2;
  18.        
  19.         /*
  20.         0 = success
  21.         1 = couldn't open network connection
  22.         2 = unknown host
  23.         3 = login failed
  24.         4 = PHP version too low
  25.         */
  26.         function Connect($server,$user,$pass) {
  27.                 $rv=0;
  28.                 $vers=explode('.',PHP_VERSION);
  29.                 $needvers=array(4,3,0);
  30.                 $j=count($vers);
  31.                 $k=count($needvers);
  32.                 if ($k<$j) $j=$k;
  33.                 for ($i=0;$i<$j;$i++) {
  34.                         if (($vers[$i]+0)>$needvers[$i]) break;
  35.                         if (($vers[$i]+0)<$needvers[$i]) {
  36.                                 $this->ConnectError(4);
  37.                                 return 4;
  38.                         }
  39.                 }
  40.                
  41.                 $this->Disconnect();
  42.                
  43.                 if (strlen($server)) {
  44.                         if (preg_match('/[^0-9.]/',$server)) {
  45.                                 $ip=gethostbyname($server);
  46.                                 if ($ip==$server) {
  47.                                         $ip='';
  48.                                         $rv=2;
  49.                                 }
  50.                         } else $ip=$server;
  51.                 } else $ip='127.0.0.1';
  52.                
  53.                 if (strlen($ip)) {
  54.                         if ($this->fp=fsockopen($ip,23)) {
  55.                                 fputs($this->fp,$this->conn1);
  56.                                 $this->Sleep();
  57.                                
  58.                                 fputs($this->fp,$this->conn2);
  59.                                 $this->Sleep();
  60.                                 $this->GetResponse($r);
  61.                                 $r=explode("\n",$r);
  62.                                 $this->loginprompt=$r[count($r)-1];

  63.                                 fputs($this->fp,"$user\r");
  64.                                 $this->Sleep();

  65.                                 fputs($this->fp,"$pass\r");
  66.                                 if ($this->use_usleep) usleep($this->loginsleeptime);
  67.                                 else sleep(1);
  68.                                 $this->GetResponse($r);
  69.                                 $r=explode("\n",$r);
  70.                                 if (($r[count($r)-1]=='')||($this->loginprompt==$r[count($r)-1])) {
  71.                                         $rv=3;
  72.                                         $this->Disconnect();
  73.                                 }
  74.                         } else $rv=1;
  75.                 }
  76.                
  77.                 if ($rv) $this->ConnectError($rv);
  78.                 return $rv;
  79.         }
  80.        
  81.         function Disconnect($exit=1) {
  82.                 if ($this->fp) {
  83.                         if ($exit) $this->DoCommand('exit',$junk);
  84.                         fclose($this->fp);
  85.                         $this->fp=NULL;
  86.                 }
  87.         }

  88.         function DoCommand($c,&$r) {
  89.                 if ($this->fp) {
  90.                         fputs($this->fp,"$c\r");
  91.                         $this->Sleep();
  92.                         $this->GetResponse($r);
  93.                         $r=preg_replace("/^.*?\n(.*)\n[^\n]*$/","$1",$r);
  94.                 }
  95.                 return $this->fp?1:0;
  96.         }
  97.        
  98.         function GetResponse(&$r) {
  99.                 $r='';
  100.                 do {
  101.                         $r.=fread($this->fp,1000);
  102.                         $s=socket_get_status($this->fp);
  103.                 } while ($s['unread_bytes']);
  104.         }
  105.        
  106.         function Sleep() {
  107.                 if ($this->use_usleep) usleep($this->sleeptime);
  108.                 else sleep(1);
  109.         }
  110.        
  111.         function PHPTelnet() {
  112.                 $this->conn1=chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
  113.                         chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).
  114.                         chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
  115.                         chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).
  116.                         chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).
  117.                         chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
  118.                         chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).
  119.                         chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
  120.                         chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
  121.                         chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).
  122.                         chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
  123.                         chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0);
  124.                 $this->conn2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
  125.                         chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);
  126.         }
  127.        
  128.         function ConnectError($num) {
  129.                 if ($this->show_connect_error) switch ($num) {
  130.                 case 1: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/fsockopen.php">Connect failed: Unable to open network connection</a><br />'; break;
  131.                 case 2: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/unknown-host.php">Connect failed: Unknown host</a><br />'; break;
  132.                 case 3: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/login.php">Connect failed: Login failed</a><br />'; break;
  133.                 case 4: echo '<br />[PHP Telnet] <a href="http://www.geckotribe.com/php-telnet/errors/php-version.php">Connect failed: Your server\'s PHP version is too low for PHP Telnet</a><br />'; break;
  134.                 }
  135.         }
  136. }

  137. return;
  138. ?>
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP