使用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 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php从字符串创建函数的方法
Mar 16 PHP
10款实用的PHP开源工具
Oct 23 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 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中in_array函数用法探究
2014/11/25 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python生成器(Generator)详解
2015/04/13 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python处理session的方法整理
2019/08/29 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
会计专业个人求职信范文
2014/01/08 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
解放思想演讲稿
2014/09/11 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
商务邀请函
2015/01/30 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
一行Python命令实现批量加水印
2022/04/07 Python
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android