使用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文本数据库的搜索方法
Oct 09 PHP
PHP爆绝对路径方法收集整理
Sep 17 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
AJAX的使用方法详解
Apr 29 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 PHP
PHP基于array_unique实现二维数组去重
Jul 14 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
PHP入门学习笔记之一
2010/10/12 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
详解a++和++a的区别
2017/08/30 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
python tornado微信开发入门代码
2018/08/24 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
华为的Java面试题
2014/03/07 面试题
优秀党员获奖感言
2014/02/18 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle