首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Socket 程式設計:連接 Usenet 新聞伺服器下載文章

     編輯:PHP 綜合知識

簡介

PHP 內建 fsockopen() 函數,可建立 TCP/UDP Socket 連線至本地或遠端伺服器。本文以連接 Usenet NNTP 伺服器為例,示範如何透過 Socket 通訊下載指定新聞群組的文章。

fsockopen() 函數說明

int fsockopen(
    string hostname,
    int port,
    int &errno,
    string &errstr,
    double timeout
)
  • hostname:域名或 IP 位址。
  • port:連接埠號碼(UDP 需加 udp:// 前綴;Unix Socket 需設 port=0)。
  • timeout:選擇性,設定連線逾時秒數,避免程式凍結。

詳細文件請見 PHP 官方手冊。

NNTP 協議簡介

NNTP(Network News Transfer Protocol)定義於 RFC 977,規範了與新聞伺服器的指令互動流程。連線需要知道伺服器主機名/ IP 及連接埠(預設 119)。

連線範例程式碼

<?php
$cfgServer = "your.news.host";
$cfgPort   = 119;
$cfgTimeOut = 10;

// 建立 Socket 連線
if (!$cfgTimeOut) {
    $usenet_handle = fsockopen($cfgServer, $cfgPort);
} else {
    $usenet_handle = fsockopen($cfgServer, $cfgPort, $errno, $errstr, $cfgTimeOut);
}

if (!$usenet_handle) {
    echo "Connection failed\n";
    exit();
} else {
    echo "Connected\n";
    $tmp = fgets($usenet_handle, 1024); // 讀取歡迎訊息
}
?>

與伺服器互動

連線成功後,可發送 NNTP 指令。例如選擇新聞群組 GROUP alt.test,伺服器回應格式:

211 232 222996 223235 alt.test

其中包含文章總數、首末文章編號等資訊。後續可使用 HEAD、BODY、ARTICLE 等指令取得文章內容。

結語

掌握 Socket 程式設計,即可在 PHP 中實現各種網路協議客戶端,應用範圍極廣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved