在PHP中使用Sockets:從Usenet中擷取檔案

來源:互聯網
上載者:User

PHP能夠開啟遠程或者本機伺服器的sockets!這裡是一個使用socket的簡單的例子:串連到Usenet的新聞伺服器,與伺服器溝通,並從一個精確的新聞分組中下載一些文章。

使用PHP開啟Socket

使用fsockopen()來開啟一個Socket。這個函數在PHP3和PHP4中都存在。函數的原型如下:

<?php
intfsockopen
  (string hostname,
    int port[,
    int errno[,
    string errstr[,
    double timeout]]])
?>

對於網路主機,它將建立一個TCP的Socket的串連到主機名稱的連接埠上。主機名稱可以是網域名稱或者IP地址。對於UDP串連,你需要明確指出其協議:udp://hostname。對於unix主機,主機名稱將在socket的路徑中使用,在這個例子中連接埠必須設定成0。可選項timeout可以用來設定連線逾時的秒數。

關於fsockopen()的更多資訊可以訪問http://www.php.net/manual/function.fsockopen.php

網路新聞傳輸通訊協定(NNTP)

訪問一個usenet新聞伺服器需要用到一個特別的協議,稱作NNTP,即網路新聞傳輸通訊協定標準。這個協議的詳細資料在RFC977中,你可以在http://www.w3.org/Protocols/rfc977/rfc977.html中查看到。這個文檔詳細的描述了如何使用不同的命令來串連並且和NNTP伺服器對話。

串連伺服器

串連到NNTP伺服器需要知道伺服器的主機名稱(或者IP地址)和它將要監聽的連接埠。另外建議你加上一個逾時的時間,這樣串連失敗的時候就不會“凍結”程式。

<?php
$cfgServer  ="your.news.host";
$cfgPort  =119;
$cfgTimeOut  =10;
// open asocket
if(!$cfgTimeOut)
  // without timeout
  $usenet_handle=fsockopen($cfgServer,$cfgPort);
else
  // with timeout
  $usenet_handle=fsockopen($cfgServer,$cfgPort, &$errno, &$errstr,$cfgTimeOut);
if(!$usenet_handle) {
  echo"Connexionfailed\n";
  exit();
}  
else {
  echo"Connected\n";
  $tmp=fgets($usenet_handle,1024);
}
?>

與伺服器互動

現在我們已經串連上伺服器了,而且能夠通過先前開啟的socket串連與伺服器進行互動。讓我們對伺服器說“我們要從某一新聞分組中擷取到最新的10篇文章”。RFC977定義了如何選擇正確的新聞分組的命令,如下:

GROUPggg

必要參數ggg是你將要選擇的新聞分組的名字,比如net.news。使用list命令你可以擷取到一組有效新聞列表。成功選擇響應會返回組中首尾兩篇新聞的新聞號以及對存檔新聞號估計。

比如

chrome:~$ telnetmy.news.host 119
Trying aa.bb.cc.dd...
Connected tomy.news.host.
Escape character is'^]'.
200 my.news.hostInterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
GROUP alt.test
211 232 222996 223235alt.test
quit
205 .

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.