使用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基础学习笔记
Mar 18 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php实现模拟post请求用法实例
Jul 11 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 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
PHP中的Memcache详解
2014/04/05 PHP
php数组查找函数总结
2014/11/18 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
js星星评分效果
2014/07/24 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
javascript实现下雨效果
2017/03/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python实现将内容分行输出
2015/11/05 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
python的re正则表达式实例代码
2018/01/24 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
通过实例解析python and和or使用方法
2020/11/14 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
2014年勤工助学工作总结
2014/11/24 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang