page contents

php socket编程入门例子

这里先运行php server.php,然后运行php client.php,然后输入内容,服务端就能接受到了。

attachments-2020-04-qdlMtzu55e8e89b618026.jpg

服务端代码server.php

<?php
//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

/**
 * 第一个参数说明:
 *  AF_UNIX(本机通信)
 * AF_INET(TCP/IP – IPv4)
 * AF_INET6(TCP/IP – IPv6)
 * 第二个参数说明:
 *  SOCK_STREAM(TCP流)
 * SOCK_DGRAM(UDP数据报)
 * SOCK_RAW(原始套接字)
 * 第三个参数说明:
 * 如果第二个参数选择的是TCP,则传递SOL_TCP否则就SOL_UDP
 */

if (!$socket) {
    echo 'create socket error' . PHP_EOL;
} else {
    echo 'create socket success' . PHP_EOL;
}


/**
 * 因为一台主机可能存在多个 ip 地址,所以你需要指定你的 socket 监听的是哪一个,
 * 常用的值为 127.0.0.1,或者是监听所有地址 0.0.0.0,
 * 那么这里可能有人不明白了,127.0.0.1 和 0.0.0.0 有啥区别呢?
 * 127.0.0.1 只是一个回环地址,只能用于本机访问,说白了就是自己玩自己的,因为这个 ip 不对外部开放,所以别人也就无法访问这个地址,
 * 所以如果你的服务器地址设置为 127.0.0.1,别人想要访问,只能去屎吧。
 * 0.0.0.0 严格来说不算是一个 ip 地址,它的意思是本机的所有 IP 地址,都是我的,哈哈。
 */

//绑定ip和端口
$addr = '127.0.0.1';
$port = 8080;
if (socket_bind($socket, $addr, $port)) {
    echo 'bind addr success' . PHP_EOL;
} else {
    echo 'bind addr error' . PHP_EOL;
}

//监听套接字
if (!socket_listen($socket)) {
    echo 'listen socket error' . PHP_EOL;
} else {
    echo 'listen socket success' . PHP_EOL;
}

//接受客户端连接
$client = socket_accept($socket);

if (!$client) {
    echo 'socket_accept error' . PHP_EOL;
} else {

    echo 'socket_accept success' . PHP_EOL;

    //接受客户端返回内容
    while (true) {
        //第一个参数是客户端套接字   第二个参数从socket中获取的数据 第三个参数是设置长度最多为 len 字节的数据将被接收。
        $bytesNum = socket_recv($client, $buffer, 100, 0);

        if (!$bytesNum) {
            echo "socket_recv  failed" . PHP_EOL;
            exit(1);
        } else {
            echo "content from client:" . $buffer . PHP_EOL;
        }
    }
}


客户端代码client.php

<?php

//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//连接套接字
if (!socket_connect($socket, '127.0.0.1', 8080)) {
    echo 'socket connect error' . PHP_EOL;
    exit(1);
} else {

    while (true) {

        //阻塞进程获取输入内容
        $data = fgets(STDIN);

        //如果用户输入quit,那么退出程序 这里要去除下空格 因为回车会造成换行符
        if (trim($data) == 'quit') {
            socket_close($socket);
            break;
        }

        //发送数据给服务端
        socket_write($socket, $data);
    }
}

这里先运行php server.php,然后运行php client.php,然后输入内容,服务端就能接受到了。



attachments-2020-04-vA1mSCKP5e8e89a35659a.jpg

  • 发表于 2020-04-09 10:34
  • 阅读 ( 658 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章