测试环境: 本地xampp服务器环境(环境可能需要配置,可以查找一些相关文档)
本地启动服务端:
模拟tcpip客户端:
<?php
set_time_limit ( 0 ); // 确保在连接客户端时不会超时
$ip = '10.10.20.19'; //!!本地自己电脑IP地址,确保正确,否则会出错
$port = 6000;
/*
* +-------------------------------
* @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)
{
//创建一个Socket链接
echo "socket_create() failed: reason: " . socket_strerror ( $sock ) . "\n";
}
if (($ret = socket_bind ( $sock, $ip, $port )) < 0)
{
//绑定Socket到端口
echo "socket_bind() failed: reason: " . socket_strerror ( $ret ) . "\n";
}
if (($ret = socket_listen ( $sock, 4 )) < 0)
{
//开始监听链接链接
echo "socket_listen() failed: reason: " . socket_strerror ( $ret ) . "\n";
}
//阻塞等待处理
do
{
if (($msgsock = socket_accept ( $sock )) < 0)
{
//堵塞等待另一个Socket来处理通信
echo "socket_accept() failed: reason: " . socket_strerror ( $msgsock ) . "\n";
break;
}
else
{
$buf = socket_read ( $msgsock, 8192 ); //获得客户端的输入
socket_write ( $msgsock, $buf, strlen ( $buf ) ); //回显
$talkback = "Recieve buffer: $buf\n"; //服务器打印信息
echo $talkback;
}
socket_close ( $msgsock );
} while ( true );
socket_close ( $sock );
?>