使用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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
php中全局变量global的使用演示代码
May 18 PHP
提高PHP编程效率的方法
Nov 07 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php中session定期自动清理的方法
Nov 12 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
PDO::exec讲解
Jan 28 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 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
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python动态加载变量示例分享
2014/02/17 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python新手学习可变和不可变对象
2020/06/11 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
中药专业毕业自荐书范文
2014/02/08 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
售房协议书范本
2015/08/11 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
java实现web实时消息推送的七种方案
2022/07/23 Java/Android