PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器。

使用这些函数时请注意,虽然他们中有很多和C函数同名的,但声明却很可能不同。未避免混淆,请仔细阅读函数描述。

不熟悉socket编程的可以在Unix手册上找到很多有用的信息,网上也有很多C socket编程方面的教程,简单修改一下就可以应用于PHP socket编程。

第一步:开启socket

到php.ini开启extension=php_sockets.dll,然后重启apache才能生效。如果没有开启或者重启阿帕奇会出现Call to undefined function socket_create()的报错。

第二步:使用socket

PHP socket工作流程是:

1.创建socket   socket_create()

2.尝试通过创建的socket连接目标ip  socket_connect(),注意了,这里只能写ip,只能写ip,我写localhost就错了。

3.获取连接结果,如果连接成功,我们就可以继续进行自己要做的事情,如果失败,我们做一个后续要做的事情。

4.关闭socket  socket_close()

PHP socket请求示例:

<?php
error_reporting(E_ALL);

echo "<h2>TCP/IP连接流程</h2>\n";

/* 获取网站服务器端口 */
$service_port = getservbyname('www', 'tcp');

/* 获取服务器的ip地址. */
$address = gethostbyname('www.wangtuizhijia.com');

/* 创建TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "socket_create创建成功\n";
}

echo "尝试通过'$service_port'端口连接'$address' ..."."<br>";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() 连接失败: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "连接端口成功."."<br>";
}

$in = "HEAD / HTTP/1.1"."<br>";
$in .= "Host: www.wangtuizhijia.com"."<br>";
$in .= "连接关闭"."<br>";
$out = '';

echo "发送HTTP HEAD请求..."."<br>";
socket_write($socket, $in, strlen($in));
echo "成功"."<br>";

echo "响应信息:"."<br>";
while ($out = socket_read($socket, 2048)) {
echo $out."<br>";
}

echo "关闭socket..."."<br>";
socket_close($socket);
echo "结束.\n\n";
?>

结果:

TCP/IP连接流程

socket_create创建成功 尝试通过'80'端口连接'103.76.85.67' ...
连接端口成功.
发送HTTP HEAD请求...
成功
响应信息:
HTTP/1.1 400 Bad Request Content-Length: 311 Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Mon, 08 May 2017 06:17:10 GMT Connection: close
关闭socket...
结束.

本人博客:PHP Socket(套接字连接)扩展简介和使用方法

最新文章

  1. 淘宝分布式文件存储系统:TFS
  2. java中volatile关键字
  3. 用EF访问Centos下的MySQL
  4. 使用junit测试用例
  5. jquery获取显示器,屏幕的宽度,和高度
  6. ajax详解,以及异步JSOP的实现
  7. Ext信息提示对话框
  8. JUnit报空指针错误,控制台不报任何错误
  9. Nio学习4——EchoServer在IO,NIO,NIO.2中的实现
  10. 修改LINUX的时区。
  11. MEF 基础简介 四
  12. 关于ajax的跨域
  13. weblogic 下异常 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken
  14. Nginx:论高并发,在座各位都是渣渣
  15. Intellij IDEA神器值得收藏的小技巧
  16. ActiveMQ 学习
  17. nodejs读取json文件,写入mongodb数据库
  18. NET调用Com组件事例
  19. Apache Derby数据库 安装、知识点
  20. 调整WebLogic的时间

热门文章

  1. linq分析
  2. [日志] spring boot + logback 日志输出配置
  3. GIT使用—补丁与钩子
  4. cordova 插件
  5. chrome 获得点击按钮时的事件
  6. 对linux内核创建flash上的各分区源码进行分析
  7. powershell如何查看以及设置环境变量
  8. Java 数据结构之双向链表
  9. SQLite内存数据库操作类
  10. Kettle 数据抽取