使用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函数
Dec 06 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
PHP页面中文乱码分析
Oct 29 PHP
去除php注释和去除空格函数分享
Mar 13 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
php实现Mysql简易操作类
Oct 11 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 PHP
PHP7创建销毁session的实例方法
Feb 03 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中调用JAVA
2006/10/09 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
如何基于python实现脚本加密
2019/12/28 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
出国留学经济担保书
2014/04/01 职场文书
素质教育标语
2014/06/27 职场文书
个人道歉信大全
2019/04/11 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB