socket_getpeername
查询给定套接字的远程端,它可能导致主机/端口或Unix文件系统路径,具体取决于其类型
PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8
socket_getpeername 函数用于获取与给定套接字关联的远程主机的地址信息。通常用于服务器端获取客户端的 IP 地址或主机名。
socket_getpeername(resource $socket, string &$address, int &$port): bool
成功时返回 true,失败时返回 false。如果失败,可以通过 socket_last_error() 获取详细的错误信息。
// 创建一个 TCP 套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "创建套接字失败:".socket_strerror(socket_last_error())."\n"; exit; } <p>// 绑定套接字到指定的地址和端口<br> $result = socket_bind($socket, '127.0.0.1', 8080);<br> if ($result === false) {<br> echo "绑定失败:".socket_strerror(socket_last_error($socket))."\n";<br> exit;<br> }</p> <p>// 开始监听套接字<br> $result = socket_listen($socket, 5);<br> if ($result === false) {<br> echo "监听失败:".socket_strerror(socket_last_error($socket))."\n";<br> exit;<br> }</p> <p>// 接受客户端连接<br> $clientSocket = socket_accept($socket);<br> if ($clientSocket === false) {<br> echo "接受连接失败:".socket_strerror(socket_last_error($socket))."\n";<br> exit;<br> }</p> <p>// 获取客户端的远程地址和端口<br> $address = '';<br> $port = 0;<br> if (socket_getpeername($clientSocket, $address, $port)) {<br> echo "客户端 IP 地址:$address,端口:$port\n";<br> } else {<br> echo "获取远程地址失败:".socket_strerror(socket_last_error($clientSocket))."\n";<br> }</p> <p>// 关闭套接字<br> socket_close($clientSocket);<br> socket_close($socket);<br>
这段代码创建了一个 TCP 套接字,绑定到本地地址 127.0.0.1 的 8080 端口,然后监听客户端的连接。当有客户端连接进来时,调用 socket_getpeername 函数获取该客户端的 IP 地址和端口号,并输出。最后,关闭客户端和服务器端的套接字。