使用sockets:从新闻组中获取文章(二)


Posted in PHP onOctober 09, 2006

与服务器对话

现在我们已经连接到了服务器,可以通过前面打开的socket同服务器对话了。比如说我们要从某个新闻组得到最近的10篇文章。RFC977指出,第一步要用GROUP命令选择正确的新闻组:
    GROUP ggg
    参数ggg是要选择的新闻组的名字(比如说是"net.news"),这是必需的。可用的新闻组的列表可以用LIST命令得到。选择新闻组的命令成功后,返回组中第一篇和最后一篇文章的文章编号,以及组中文章的数目。
    下面是一个例子:
    chrome:~$ telnet my.news.host 119
    Trying aa.bb.cc.dd...
    Connected to my.news.host.
    Escape character is '^]'.
    200 my.news.host InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
    GROUP alt.test
    211 232 222996 223235 alt.test
    quit
    205 .

    接收到命令 GROUP alt.test 后,服务器返回"211 232 222996 223235 alt.test". 211是RFC中定义的返回码,指示命令已成功执行。返回信息还指出,现在有232篇文章,最早的文章的编号是222996,最新的文章的编号是223235。我们看到,222996+232并不等于223235。丢失的7篇文章因为某种原因被从服务器删除了,可能是因为被它的合法作者取消了(这是可能的,而且很容易做到),或者因为是灌水文章而被删。
    需要注意的事,有些服务器在选择新闻组之前可能要求身份认证,这取决于这是一个公共的或者是私用的服务器。也有可能服务器允许任何人读取文章,但发表文章需要身份验证。

    <?php

      //$cfgUser    = "xxxxxx";
      //$cfgPasswd  = "yyyyyy";
      $cfgNewsGroup = "alt.php";

      //identification required on private server
      if($cfgUser) {
          fputs($usenet_handle, "AUTHINFO USER ".$cfgUser."n");
          $tmp = fgets($usenet_handle, 1024);
          fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."n");
          $tmp = fgets($usenet_handle, 1024);

          //check error

          if($tmp != "281 Okrn") {
              echo "502 Authentication errorn";
              exit();
          }
  }

  //select newsgroup

  fput($usenet_handle, "GROUP ".$cfgNewsGroup."n");
  $tmp = fgets($usenet_handle, 1024);

  if($tmp == "480 Authentication required for commandrn") {
     echo $tmp;
     exit();
  }

  $info = split(" ", $tmp);
  $first= $info[2];
  $last = $info[3];

  printf("First : %sn", $first);
  printf("Last : %lastn", $last);

?> 

PHP 相关文章推荐
用PHP实现维护文件代码
Jun 14 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
通过ODBC连接的SQL SERVER实例
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(一)
Oct 09 #PHP
PHP自动更新新闻DIY
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(二)
Oct 09 #PHP
层叠菜单的动态生成
Oct 09 #PHP
You might like
中国收音机工业发展史
2021/03/02 无线电
德生H-501的评价与改造
2021/03/02 无线电
php的ajax简单实例
2014/02/27 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
python中定义结构体的方法
2013/03/04 Python
进一步理解Python中的函数编程
2015/04/13 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
通过python检测字符串的字母
2020/02/18 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
日语专业个人的求职信
2013/12/03 职场文书
英语演讲稿范文
2014/01/03 职场文书
个人借款担保书
2014/04/02 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
行政申诉状范文
2015/05/20 职场文书
刑事案件上诉状
2015/05/23 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android