unix socket server and client

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/raoxiaoya/article/details/100561510

UnixSocketClient.php

<?php
error_reporting(E_ALL);
set_time_limit(0);

$unix_file = '/tmp/server.sock';

// 1. 创建
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);

if ($socket == FALSE) {
    echo 'create fail: ' . socket_strerror(socket_last_error());
}

// 2. 链接
$result = socket_connect($socket, $unix_file);
if ($result == FALSE) {
    echo 'connect failed...' . PHP_EOL . PHP_EOL;
} else {
    echo 'connect success...' . PHP_EOL . PHP_EOL;
}

$in = 'student ' . (int)$socket . ' come in';

// 3. 向服务端写入
if (!socket_write($socket, $in, strlen($in))) {
    echo 'write fail: ' . socket_strerror(socket_last_error());
}

$getMsg = '';
$len    = 8129;// 每次读取数据的字节数

// 3. 从服务端读取全部的数据
do {
    $out    = @socket_read($socket, $len);
    $getMsg .= $out;
    if (strlen($out) < $len) {
        break;
    }
} while (true);

echo $getMsg . PHP_EOL;

// 4. 关闭
echo 'close socket...' . PHP_EOL;
socket_close($socket);
echo 'closed ok....';

UnixSocketServer.php

<?php
set_time_limit(0);

$unix_file = '/tmp/server.sock';
static $connList = array();
// 1. 创建
if (($sock = socket_create(AF_UNIX, SOCK_STREAM, 0)) == FALSE) {
    echo 'create fail:' . socket_strerror(socket_last_error());
}

// 2. 绑定
if (socket_bind($sock, $unix_file) == FALSE) {
    echo 'bind fail:' . socket_strerror(socket_last_error());
}

// 3. 监听
if (socket_listen($sock, 4) == FALSE) {
    echo 'listen fail:' . socket_strerror(socket_last_error());
}

$count = 0;
$len   = 8129;// 每次读取数据的字节数

do {
    // 4. 阻塞,等待客户端请求
    if (($msgsock = socket_accept($sock)) == FALSE) {
        echo 'accept fail:' . socket_strerror(socket_last_error());
        break;
    } else {
        array_push($connList, (int)$msgsock);

        // 5. 读取客户端全部信息
        $talkback = '';
        do {
            $buf      = @socket_read($msgsock, $len);
            $talkback .= $buf;
            if (strlen($buf) < $len) {
                break;
            }
        } while (true);

        echo $talkback . PHP_EOL;

        // 6. 向客户端写入信息
        $msg = "server response " . (int)$msgsock;

        socket_write($msgsock, $msg, strlen($msg));

        print_r($connList);
        echo PHP_EOL;

    }

} while (true);

// 6. 关闭socket
socket_close($sock);

Guess you like

Origin blog.csdn.net/raoxiaoya/article/details/100561510