手机版

如何用PHP实现套接字服务器

时间:2021-10-02 来源:互联网 编辑:宝哥软件园 浏览:

服务器是这样工作的,持续运行以等待客户端的连接。客户端连接后,服务器会将其添加到客户端列表中,然后开始等待来自客户端的消息。

不要走开,这里是完整的源代码:

//设置时限为不定执行Set _ time _ limit(0);//设置我们将监听的ip和端口$ address=' localhost$ port=10000$ max _ clients=10//将保存客户端信息的数组$ client=Array();//创建TCP Stream套接字$sock=socket_create(AF_INET,SOCK_STREAM,0);//将套接字绑定到地址/端口socket_bind($sock,$address,$port)或die('无法绑定到地址');//开始监听连接socket _ listen($ sock);回声'等待连接.\ r \ n ';//在(true)时连续循环{ //安装客户端侦听套接字以读取$ read[0]=$ sock;for($ I=0;$ i $ max _ clients$ I){ if(isset($ client[$ I][' sock '])$ read[$ I 1]=$ client[$ I][' sock '];} //如果(socket_select($read,$write=NULL,$except=NULL,$tv_sec=5) 1)继续,则设置对socket_select()的阻塞调用;/*如果正在建立新的连接,请将其添加到客户端数组*/if (in_array($sock,$ read)){ for($ I=0;$ i $ max _ clients$i ) { if(空($ client[$ I][' sock ']){ $ client[$ I][' sock ']=socket _ accept($ sock);回显“新客户端已连接$ I \ r \ n”;打破;} elseif ($i==$max_clients - 1)回显“客户端太多”.\ r \ n ';} }//end If _ in _ array//如果客户端现在正尝试为($i=0)写句柄;$ i $ max _ clients$i ) { //对于每个客户端if(isset($ client[$ I][' sock ']){ if(in _ array($ client[$ I][' sock '],$ read)){ $ input=socket _ read($ client[$ I][' sock '],1024);if($ input==null){ echo ' Client disconnecting $ I \ r \ n ';//零长度字符串,表示断开的未设置($ client[$ I]);} else { echo '新输入收到$ I \ r \ n ';//将其发送给其他客户端,费用为($ j=0;$ j $ max _ clients$ j){ if(isset($ client[$ j][' sock '])$ j!=$i) {将' $input '写回客户端$ j \ r \ n ';socket _ write($ client[$ j][' sock '],$input,strlen($ input));} } if ($input=='exit') { //请求断开socket _ close($ client[$ I][' sock ']);} } } else { echo ' Client disconnected $ I \ r \ n ';//Close socket _ Close($ client[$ I][' sock ']);unset($ client[$ I]);} } } } //end while //关闭主套接字socket _ Close($ sock);哎呀,乍一看这似乎是一个大项目,但我们可以先把它分成几个小部分。

第一部分是创建一个服务器。线路:2至20。

这部分代码设置变量、地址、端口、最大客户端和客户端数组。接下来,创建一个套接字,并将其绑定到我们指定的地址和端口。

接下来我们需要做的是执行一个无限循环(事实上,我们是故意的!)。第22到32行。

这部分代码的第一步是设置$read数组。这些组包含所有客户端的套接字和我们主服务器的套接字。这个变量将在后面的select语句中使用:告诉PHP监听来自这些客户端的每一条消息。

socket_select()的最后一个参数告诉我们的服务器在返回值之前最多等待5秒钟。如果它的返回值小于1,则表示没有接收到任何数据,所以只需回到循环的顶部并继续等待。

脚本的下一部分是向阵列添加新客户端。第33到44行。

将新客户端放在列表的末尾。检查以确保客户端的数量不超过我们希望服务器处理的数量。

下面要介绍的代码块相当大,也是服务器的主要部分。当客户端向服务器发送消息时,它需要这段代码来处理它。消息可以是多种多样的,断开消息和实际断开——只是服务器需要处理的消息。台词:46到最后。

代码循环遍历每个客户端,并检查是否从它们那里接收到消息。如果是,获取输入内容。根据输入检查这是否是断开连接的消息,如果是,从数组中删除它们,否则,这是一个正常的消息,然后我们的服务器再次通过所有客户端,并逐个向它们写入信息,跳过发送者。

好吧,让我们尝试创建自己的聊天服务器!

版权声明:如何用PHP实现套接字服务器是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。