使用sockets:从新闻组中获取文章(一)


Posted in PHP onOctober 09, 2006

By Armel Fauveau  一木 译
    PHP能打开远程或本地主机上的Socket端口。本文是一个使用Socket的小例子:连接到一个Usenet新闻组服务器,同服务器对话,从新闻组中下载一些文章。

在php中打开一个socket
    使用fsockopen()打开一个socket.这个函数在php3和php4种都可以使用。函数声明是这样的:
    int fsockopen (string hostname, int port [, int errno [, string errstr [, double timeout]]])
    这个函数将打开一个连接到主机hostname的port端口的TCP连接。hostname可以是一个有效的域名,或者是一个ip地址。对于udp连接,你必须指定协议:udp://hostname. 对于unix域,主机名使用到socket的路径,这种情况下,端口port必须置为0。可选的timeout参数用来设定等待打开一个socket的时间,单位为秒。
    关于fsockopen()的更多信息,请参考:http://www.php.net/manual/function.fsockopen.php

网络新闻传输协议
    访问新闻组服务器需要通过称为NNTP(网络新闻传输协议)的协议来进行。这个协议在rfc977中有详细的细节,可以在http://www.w3.org/Protocols/rfc977/rfc977.html得到。这个文档分别描述了怎样连接到NNTP服务器,怎样同服务器对话,以及完成这些任务的不同命令。

连接
    连接到一个NNTP服务器需要知道它的主机名(或者是ip地址)和它侦听的端口。为了避免一个连接企图失败导致程序挂起,你应该使用timeout参数。
    <?php
      $cfgServer   = "your.news.host";
      $cfgPort     = 119;
      $cfgTimeOut  = 10;

      //open a socket
      if(!$cfgTimeOut)
         // without timeout
         $usenet_handle = fsockopen($cfgServer, $cfgPort);
      else
         // with timeout
         $usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);

      if(!$usenet_handle) {
          echo "Connection failed.\n";
          exit();
      }
      else {
          echo "Connected.\n";
          $tmp = fgets($usenet_handle, 1024);
      }

?> 

PHP 相关文章推荐
PHP 七大优势分析
Jun 23 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
PHP 第三节 变量介绍
Apr 28 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
php生成唯一的订单函数分享
Feb 02 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
使用sockets:从新闻组中获取文章(三)
Oct 09 #PHP
PHP+MYSQL的文章管理系统(二)
Oct 09 #PHP
使用sockets:从新闻组中获取文章(二)
Oct 09 #PHP
通过ODBC连接的SQL SERVER实例
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(一)
Oct 09 #PHP
You might like
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
JavaScript实现筛选数组
2021/03/02 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
wxPython使用系统剪切板的方法
2015/06/16 Python
python正则表达式re之compile函数解析
2017/10/25 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
自荐信封面
2013/12/04 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
怎样写演讲稿
2014/01/04 职场文书
建房协议书
2014/04/11 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers