使用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
main.php
Dec 09 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
解决PhpStorm64不能启动的问题
Jun 20 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
js获取ip和地区
2017/03/10 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
浅谈vue路径优化之resolve
2017/10/13 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python代码太长换行的实现
2019/07/05 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
2014年健康教育实施方案
2014/02/17 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书