使用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调用Java对象的方法
Oct 09 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 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
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP制作万年历
2015/01/07 PHP
常用PHP封装分页工具类
2017/01/14 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python在每个字符后添加空格的实例
2018/05/07 Python
详解Python学习之安装pandas
2019/04/16 Python
django实现支付宝支付实例讲解
2019/10/17 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
动态密码技术
2012/10/18 面试题
Linux的主要特性
2014/10/06 面试题
个性与发展自我评价
2014/02/11 职场文书
解除劳动合同协议书
2014/04/14 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
少先队工作总结2015
2015/05/13 职场文书
六年级情感作文之500字
2019/10/23 职场文书
详解Python牛顿插值法
2021/05/11 Python
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android