使用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上传图片、删除图片实现代码
May 12 PHP
php的字符串用法小结
Jun 08 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
PHP内核探索:变量概述
Jan 30 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
php文件下载处理方法分析
Apr 22 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
php简单压缩css样式示例
Sep 22 PHP
php与阿里云短信接口接入操作案例分析
May 27 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php获取mysql版本的几种方法小结
2008/03/25 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Laravel下生成验证码的类
2017/11/15 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
分分钟入门python语言
2018/03/20 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
中英文自我评价语句
2013/12/20 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫