php socket创建tcp服务端. 快速入门,不处理异常状态.

简单实例

通过三步,1.创建socket 2.绑定端口 3. 监听

# 创建ipv4 tcp stream类型的socket
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
# 绑定 8001 端口
socket_bind($socket, '0.0.0.0',8001);
# 开始监听
socket_listen($socket,2);

sleep(20);

验证成功.

image-20230918162809761

详解:

1. socket_create函数,创建socket

socket_create(
  int $domain, //网络协议,AF_INET:IPv4,AF_INET6:IPv6,AF_UNIX:UNIX本地通讯
  int $type, // socket类型,SOCK_STREAM:流(tcp),....
  int $protocol,// 具体网络协议,SOL_TCP:tcp,SOL_UDP:udp等.可以通过getprotobyname("tcp")获得
):Socket|false
  1. socket_bind函数,绑定socket
socket_bind(
    Socket $socket, // 通过 socket_create()创建的socket 
  string $address, // 地址,AF_INET的ip地址.AF_UNIX的文件路径
  int $port = 0,// AF_INET的端口
):bool;
  1. socket_listen: 监听
socket_listen(
  Socket $socket, //  socket_create() 创建的socket
  int $backlog = 0,// backlog 队列数
): bool

backlog最大值2,超过2就不处理了

image-20230918165846306

等待客户端

阻塞获取信息

$client=socket_accept($socket);

获取数据

$ret=socket_read($client,1024);
echo "Req:".$ret;

image-20230918172335233

发送数据

socket_write($client,"ok");

关闭连接

socket_close($client);
socket_close($socket);

完整代码

<?php
declare(strict_types=1);
// 创建socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 绑定端口文件
socket_bind($socket, '127.0.0.1',8001);
// 监听
socket_listen($socket,2);
// 获取连接
$client=socket_accept($socket);
socket_getpeername($client,$clientAddress,$clientPort);
echo "client:${clientAddress}:${clientPort}";

// 获取数据
$ret=socket_read($client,1024);
echo "Req:".$ret.PHP_EOL;

//发送数据
socket_write($client,"ok");

// 关闭
socket_close($client);
socket_close($socket);

原作者:阿金
本文地址:https://hi-arkin.com/archives/socket-tcp.html

标签: tcp socket socket_create socket_bind socket_listen

(本篇完)

评论