您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何使用socket函數從新聞組中獲取文章的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
socket函數聲明是什么樣的
intfsockopen(stringhostname,intport_
[,interrno[,stringerrstr[,doubletimeout]]])
這個函數將打開一個連接到主機hostname的port端口的TCP連接。hostname可以是一個有效的域名,或者是一個ip地址。對于udp連接,你必須指定協議:udp://hostname.對于unix域,主機名使用到socket的路徑,這種情況下,端口port必須置為0。可選的timeout參數用來設定等待打開一個socket的時間,單位為秒。
網絡新聞傳輸協議
訪問新聞組服務器需要通過稱為NNTP(網絡新聞傳輸協議)的協議來進行。這個文檔分別描述了怎樣連接到NNTP服務器,怎樣同服務器對話,以及完成這些任務的不同命令。
連接
連接到一個NNTP服務器需要知道它的主機名(或者是ip地址)和它偵聽的端口。為了避免一個連接企圖失敗導致程序掛起,你應該使用timeout參數。
$cfgServer="your.news.host";
$cfgPort=119;
$cfgTimeOut=10;
//openasocket
if(!$cfgTimeOut)
//withouttimeout
$usenet_handle=fsockopen($cfgServer,$cfgPort);
else
//withtimeout
$usenet_handle=fsockopen($cfgServer,$cfgPort,&$errno,&$errstr,$cfgTimeOut);
if(!$usenet_handle){
echo"Connectionfailed.\n";
exit();
}
else{
echo"Connected.\n";
$tmp=fgets($usenet_handle,1024);
}
?>
與服務器對話
現在我們已經連接到了服務器,可以通過前面打開的socket同服務器對話了。比如說我們要從某個新聞組得到最近的10篇文章。RFC977指出,第一步要用GROUP命令選擇正確的新聞組:
GROUPggg
參數ggg是要選擇的新聞組的名字(比如說是"net.news"),這是必需的。可用的新聞組的列表可以用LIST命令得到。選擇新聞組的命令成功后,返回組中第一篇和最后一篇文章的文章編號,以及組中文章的數目。
下面是一個例子:
chrome:~$telnetmy.news.host119
Tryingaa.bb.cc.dd...
Connectedtomy.news.host.
Escapecharacteris'^]'.
200my.news.hostInterNetNewsNNRPserverINN2.2.213-Dec-1999ready(postingok).
GROUPalt.test
211232222996223235alt.test
quit
205.
接收到命令GROUPalt.test后,服務器返回"211232222996223235alt.test".211是RFC中定義的返回碼,指示命令已成功執行。返回信息還指出,現在有232篇文章,最早的文章的編號是222996,最新的文章的編號是223235。我們看到,222996+232并不等于223235。丟失的7篇文章因為某種原因被從服務器刪除了,可能是因為被它的合法作者取消了(這是可能的,而且很容易做到),或者因為是灌水文章而被刪。
需要注意的事,有些服務器在選擇新聞組之前可能要求身份認證,這取決于這是一個公共的或者是私用的服務器。也有可能服務器允許任何人讀取文章,但發表文章需要身份驗證。
//$cfgUser="xxxxxx";
//$cfgPasswd="yyyyyy";
$cfgNewsGroup="alt.php";
//identificationrequiredonprivateserver
if($cfgUser){
fputs($usenet_handle,"AUTHINFOUSER".$cfgUser."n");
$tmp=fgets($usenet_handle,1024);
fputs($usenet_handle,"AUTHINFOPASS".$cfgPasswd."n");
$tmp=fgets($usenet_handle,1024);
//checkerror
if($tmp!="281Okrn"){
echo"502Authenticationerrorn";
exit();
}
}
//selectnewsgroup
fput($usenet_handle,"GROUP".$cfgNewsGroup."n");
$tmp=fgets($usenet_handle,1024);
if($tmp=="480Authenticationrequiredforcommandrn"){
echo$tmp;
exit();
}
$info=split("",$tmp);
$first=$info[2];
$last=$info[3];
printf("First:%sn",$first);
printf("Last:%lastn",$last);
?>
感謝各位的閱讀!關于“如何使用socket函數從新聞組中獲取文章”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。