中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用socket函數從新聞組中獲取文章

發布時間:2021-09-27 11:00:15 來源:億速云 閱讀:132 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關如何使用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函數從新聞組中獲取文章”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

布尔津县| 卓资县| 甘孜| 高雄市| 宜宾县| 蒙城县| SHOW| 广丰县| 巴东县| 甘德县| 浮梁县| 安乡县| 天峨县| 海淀区| 乡城县| 西乌珠穆沁旗| 唐河县| 青龙| 津南区| 洛隆县| 垣曲县| 札达县| 金沙县| 阜南县| 开平市| 黔东| 宣汉县| 郸城县| 紫阳县| 枝江市| 延庆县| 来宾市| 桃园县| 北安市| 天等县| 锡林浩特市| 图片| 青冈县| 新田县| 大关县| 阜康市|