使用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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
杏林同学录(二)
Oct 09 PHP
php 用sock技术发送邮件的函数
Jul 21 PHP
php 设计模式之 工厂模式
Dec 19 PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP实现非阻塞模式的方法分析
Jul 26 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
Laravel配合jwt使用的方法实例
Oct 25 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 和 MySQL 基础教程(三)
2006/10/09 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
JS array 数组详解
2009/03/22 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
babel基本使用详解
2017/02/17 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python解惑之整数比较详解
2017/04/24 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python与R语言的简要对比
2017/11/14 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python re模块的高级用法详解
2018/06/06 Python
python如何生成网页验证码
2018/07/28 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python tkinter三种布局实例详解
2020/01/06 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
高中生期末评语
2014/01/28 职场文书
八年级数学教学反思
2014/01/31 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书