一、简介请结合下图 socket 抽象层的位置来理解。socket 是应用层和 tcp/ip 协议族进行通信的中间软件抽象层,是一组接口。在设计模式中,就是一个门面模式,它把复杂的实现封装在接口后面,而只提供了一组简单的接口给用户调用。在普遍的程序语言中,这些接口一般是 create、bind、listen、accept、write、read、close 和 connect 等等。
二、实例1. 效果图
2. 代码
服务端:server.php
<?php
set_time_limit(0); // 去掉时间限制
ob_implicit_flush(); // 开启强制刷新
// 1. 创建socket
$socket = socket_create(af_inet, sock_stream, sol_tcp);
// 2. 绑定端口和ip
socket_bind($socket, '127.0.0.1', 11279);
// 3. 端口监听
socket_listen($socket);
echo 'server is listening!' . php_eol;
// 4. accept阻塞进程
$connect = socket_accept($socket); // 直到有连接进入,accept才会返回
echo 'client [' . $connect . '] is accessing...' . php_eol;
// 5. 交互
socket_write($connect, 'welcome, visitor! now you can send message to the server.' . php_eol);
while ($connect) {
// 获取请求
$request = socket_read($connect, 1024);
echo 'client ['. $connect .'] message: ' . $request;
// 关闭连接
if($request == "bye" . php_eol){
socket_shutdown($connect);
break;
}
// 发送响应
$response = 'your sended message: ' . $request;
socket_write($connect, $response);
}
// 6. 销毁socket
socket_close($socket);
客户端:client.php
<?php
// 1. 创建socket
$socket = socket_create(af_inet, sock_stream, sol_tcp);
// 2. 建立连接
$result = socket_connect($socket, '127.0.0.1', 11279);
if($result === false){
socket_close($socket);
die('socket connect failed: ' . socket_strerror(socket_last_error($socket)));
}
// 3. 交互
while($result){
// 获取响应
$response = socket_read($socket, 1024);
echo $response;
// 发送请求
$request = fgets(stdin);
socket_write($socket, $request, 1024);
// 关闭连接
if($request == "bye" . php_eol){
socket_shutdown($socket);
break;
}
}
// 4.销毁socket
socket_close($socket);
以上就是php 结合实例认识什么是socket的详细内容。