使用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 相关文章推荐
自动跳转中英文页面
Oct 09 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
PHP判断是否有Get参数的方法
May 05 PHP
PHP中数组的分组排序实例
Jun 01 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
php面向对象重点知识分享
Sep 27 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中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php远程下载类分享
2016/04/13 PHP
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python 切片和range()用法说明
2013/03/24 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Python单例模式的两种实现方法
2017/08/14 Python
快速了解Python相对导入
2018/01/12 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
python+pyqt5编写md5生成器
2019/03/18 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
端口镜像是怎么实现的
2014/03/25 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
个人剖析材料范文
2014/09/30 职场文书
公司给客户的感谢信
2015/01/23 职场文书