使用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 相关文章推荐
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
php多任务程序实例解析
Jul 19 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
PHP curl使用实例
Jul 02 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
Laravel中间件实现原理详解
Oct 09 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 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的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
javascript读取RSS数据
2007/01/20 Javascript
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
JSON 数据格式详解
2017/09/13 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
python模块smtplib学习
2018/05/22 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python创建临时文件和文件夹
2020/08/05 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
中专自荐信
2013/10/13 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书