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 参数
- $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);
- }
- ?>
来源: https://www.php1.cn/detail/php-81978bcb16.html