socket_server服务器端:
<\?php
/*
+——————————-
* @socket通信整个过程
+——————————-
* @socket_create
* @socket_bind
* @socket_listen
* @socket_accept
* @socket_read
* @socket_write
* @socket_close
+——————————–
*/
//确保连接客户端不会超时
set_time_limit(0);
$ip = ‘127.0.0.1’;
$port = 8080;
//创建一个socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($sock < 0){
echo “创建失败原因:” . socket_strerror($sock) . “\n”;
}
//socket_close($sock);
//绑定socket到端口
$ret = socket_bind($sock, $ip, $port);
if($ret < 0){
echo “socket_bind()失败:” . socket_strerror($sock) . “\n”;
}
//监听socket连接
$ret = socket_listen($sock, 4);
if($ret < 0){
echo “socket_listen失败:” . socket_strerror($sock) . “\n”;
}
//挂起socket进程
$count = 0;
while(true){
//堵塞等待另接受一个Socket来处理通信
$msgsock = socket_accept($sock);
if($msgsock < 0){
echo “socket_accept:” . socket_strerror($msgsock) . “\n”;
break;
}else{
//发送消息到客户端
$msg = “发送给客户端的消息测试成功”;
socket_write($msgsock, $msg, strlen($msg));
//接受客户端消息,
\$buf = socket_read(\$msgsock, 8192);
\$talkmsg = "收到客户端的消息:" . \$buf . "\n";
echo \$talkmsg;
}
socket_close(\$msgsock);
}
socket_close($sock);
socket_client客户端
注意
服务器端接着处于监听状态,每次client请求都会接到反馈,注意该列使用的socket通讯方式其实是很落后的同步阻塞 IO 模型,其上还有同步非阻塞 IO 模型(select/poll 的同步模型)以及使用 epoll/kqueue 的异步模型:属于异步阻塞/非阻塞 IO 模型;(大多数都是epoll/kqueue模型)