使用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.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php实现mysql封装类示例
May 07 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
php密码生成类实例
Sep 24 PHP
php计算税后工资的方法
Jul 28 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
简单实现PHP留言板功能
Dec 21 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP实现两种排课方式
Jun 26 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入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
PHP反射API示例分享
2016/10/08 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
关于element的表单组件整理笔记
2021/02/05 Javascript
在Django框架中编写Contact表单的教程
2015/07/17 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
没编程基础可以学python吗
2020/06/17 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
adidas泰国官网:adidas TH
2020/07/11 全球购物
医学生个人求职信范文
2014/02/07 职场文书
接待员岗位责任制
2014/02/10 职场文书
超市中秋节活动方案
2014/02/12 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android