使用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 相关文章推荐
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
php计算函数执行时间的方法
Mar 20 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
PHP的new static和new self的区别与使用
Nov 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
Yii获取当前url和域名的方法
2015/06/08 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
python实现简易淘宝购物
2019/11/22 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
学校读书活动总结
2014/06/30 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2014年党员整改措施
2014/10/24 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
2015年教务工作总结
2015/05/23 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js