使用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中处理模拟rewrite 效果
Dec 09 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
php生成zip文件类实例
Apr 07 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
PHP异步进程助手async-helper
Feb 05 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
php下的原生ajax请求用法实例分析
Feb 28 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五种设计模式小结
2011/03/23 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
python获取当前日期和时间的方法
2015/04/30 Python
Python部署web开发程序的几种方法
2017/05/05 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python+requests接口自动化框架的实现
2020/08/31 Python
小学少先队活动方案
2014/02/18 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
课程设计的心得体会
2014/09/03 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
加强作风建设心得体会
2014/10/22 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
晚会开幕词
2015/01/28 职场文书
护理专业自我评价
2015/03/11 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
花田少年史观后感
2015/06/16 职场文书