socket详解

<?php
/*
 * 
 * socket主要翻译为套接字
 * 
socket_accept — Accepts a connection on a socket
 *               接受一个socket链接
 * 
socket_bind — 给套接字绑定名字
socket_clear_error — 清除套接字或者最后的错误代码上的错误
socket_close — 关闭套接字资源
socket_cmsg_space — Calculate message buffer size
 *                   消息缓冲区大小的计算
 * 
socket_connect — 开启一个套接字连接
socket_create_listen — Opens a socket on port to accept connections
 *                      打开一个套接字端口接受连接
 * 
socket_create_pair — Creates a pair of indistinguishable sockets and stores them in an array
 *                    创建一对不可区分套接字并将其存储在一个数组
 * 
socket_create — 创建一个套接字(通讯节点)
socket_get_option — Gets socket options for the socket
 *                   获取socket套接字选项
 * 
socket_getpeername — Queries the remote side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type
 *                    查询给定的套接字的远程侧既可以导致主机/端口或Unix文件系统路径,依赖于它的类型
 * 
socket_getsockname — Queries the local side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type
 *                    查询给定的套接字的本地端可能既导致主机/端口或Unix文件系统路径,依赖于它的类型
 * 
socket_import_stream — Import a stream
 *                      导入流
 *  
socket_last_error — Returns the last error on the socket
 *                   返回最后的socket的错误
 * 
socket_listen — Listens for a connection on a socket
 *               监听socket的一个链接
 * 
socket_read — Reads a maximum of length bytes from a socket
 *            从socket读取最大长度字节
 * 
socket_recv — Receives data from a connected socket
 *             从连接套接字接收数据
 * 
socket_recvfrom — Receives data from a socket whether or not it is connection-oriented
 *                 从socket连接接收数据无论链接是否是面向连接
 * 
socket_recvmsg — Read a message
 *                读取一个信息
 * 
socket_select — Runs the select() system call on the given arrays of sockets with a specified timeout
 *              运行的select()系统指定一个给定的数组sockets,有指定的超时时间
 * 
socket_send — Sends data to a connected socket
 *             用socket链接发送数据
 * 
socket_sendmsg — Send a message
 *                发送一个信息
 * 
socket_sendto — Sends a message to a socket, whether it is connected or not
 *               用socket发送一个信息,无论是链接还是没有链接
 * 
socket_set_block — Sets blocking mode on a socket resource
 *                  设置阻塞模式的socket资源模式
 * 
socket_set_nonblock — Sets nonblocking mode for file descriptor fd
 *                     设置无阻塞的文件描述符FD模式
 * 
socket_set_option — Sets socket options for the socket
 *                   设置socket套接字选项
 * 
socket_shutdown — Shuts down a socket for receiving, sending, or both
 *                 关闭一个socket接收,发送,或同时
 * 
socket_strerror — Return a string describing a socket error
 *                 返回一个描述一个socket错误字符串
 * 
socket_write — Write to a socket
 *              写给一个socket
 *  
 * 
 */

server.php

<?php //确保在连接客户端时不会超时 set_time_limit(0); $ip = '127.0.0.1'; $port = 1935; /* +------------------------------- * @socket通信整个过程 +------------------------------- * @socket_create * @socket_bind * @socket_listen * @socket_accept * @socket_read * @socket_write * @socket_close +-------------------------------- */ /*---------------- 以下操作都是手册上的 -------------------*/ if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) { echo "socket_create() 失败的原因是:".socket_strerror($sock)." "; } if(($ret = socket_bind($sock,$ip,$port)) < 0) { echo "socket_bind() 失败的原因是:".socket_strerror($ret)." "; } if(($ret = socket_listen($sock,4)) < 0) { echo "socket_listen() 失败的原因是:".socket_strerror($ret)." "; } $count = 0; do { if (($msgsock = socket_accept($sock)) < 0) { echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . " "; break; } else { //发到客户端 $msg ="测试成功! "; socket_write($msgsock, $msg, strlen($msg)); echo "测试成功了啊 "; $buf = socket_read($msgsock,8192); $talkback = "收到的信息:$buf "; echo $talkback; if(++$count >= 5){ break; }; } //echo $buf; socket_close($msgsock); } while (true); socket_close($sock); ?>
<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>
";

$port = 1935;
$ip = "127.0.0.1";

/*
 +-------------------------------
 *    @socket连接整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_connect
 *    @socket_write
 *    @socket_read
 *    @socket_close
 +--------------------------------
 */

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "
";
}else {
    echo "OK.
";
}

echo "试图连接 '$ip' 端口 '$port'...
";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
    echo "socket_connect() failed.
Reason: ($result) " . socket_strerror($result) . "
";
}else {
    echo "连接OK
";
}

$in = "Ho
";
$in .= "first blood
";
$out = '';

if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "
";
}else {
    echo "发送到服务器信息成功!
";
    echo "发送的内容为:<font color='red'>$in</font> <br>";
}

while($out = socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!
";
    echo "接受的内容为:",$out;
}


echo "关闭SOCKET...
";
socket_close($socket);
echo "关闭OK
";
?>

server.php需要在cli模式下运行,后续还有更多例子添加

原文地址:https://www.cnblogs.com/zx-admin/p/4380969.html