巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

php简略socket办事器客户端代码实例

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-28 13:45:24 阅读数: 131

本篇文章分享一个简略的socket示例,用php。完成一个领受输入字符串,处置并前往这个字符串到客户真个TCP办事。

产生一个 socket 办事端

<?php/*文件名:socket_server.php*/// 设置一些根基的变量$host="127.0.0.1";//Socket运转的办事器的IP地点$port=1234;//Socket运转的办事器的端口,端口取值为1到65535之间的数字,条件是这个端口未被利用// 设置超不时辰,这里设置为永不超时,确保PHP在期待客户端毗连时不会超时。set_time_limit(0);// 成立一个Socket,前往一个Socket句柄$socket=socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create socket");//绑定Socket到指定的地点和端口$result=socket_bind($socket,$host,$port) or die("Could not bind to socket");// 起头监听内部毗连$result=socket_listen($socket,3) or die("Could not set up socket listener");/******到这里,办事器除期待来自客户真个毗连要求外根基上甚么也不做******/// 别的一个Socket来处置办事端与客户真个通讯$spawn=socket_accept($socket) or die("Could not accept incoming connection");// 读取客户真个输入,当一个毗连被成立后,办事器就会期待客户端发送一些输入信息,这些信息能够或许或许由socket_read()函数来取得,并把它赋值给PHP的$input变量$input=socket_read($spawn,1024) or die("Could not read input");//socker_read的第二个参数用以指定读入的字节数,你能够或许或许经由进程它来限定从客户端获得数据的巨细// 上面这不就不诠释了,不晓得的本身面壁去$input=trim($input);//处置客户端输入并前往成果,当客户端发来数据信息后,信息输入就要靠socket_write()函数来完成$output=strrev($input) ."";//反转字符串,这里仅仅是为了更好的辨别两条信息socket_write($spawn,$output,strlen($output)) or die("Could not write output");// 封闭socketssocket_close($spawn);socket_close($socket);

提醒:你应当利用你的号令提醒符来运转上面这段代码。来由是由于这里将产生一个办事器,而不是一个Web页面。若是你测验考试利用Web阅读器来运转这个剧本,那末很有能够或许或许它会跨越30秒的限时。你能够或许或许利用上面的代码来设置一个无穷的运转时辰,可是仍是倡议利用号令提醒符来运转。复制代码 代码以下:set_time_limit(0);在你的号令提醒符中对这个剧本停止简略测试:复制代码 代码以下:Php.exe socket_server.php若是你不在体系的环境变量中设置php诠释器的途径,那末你将须要给php.exe指定具体的途径。当你运转这个办事器真个时辰,你能够或许或许经由进程长途登岸(telnet)的体例毗连到端口1337来测试这个办事器。

上面的办事器端有三个题目:

1. 它不能接管多个毗连。

2. 它只完成独一的一个号令。

3. 你不能经由进程Web阅读器毗连这个办事器。

这个第一个题目比拟轻易处置,你能够或许或许利用一个利用法式去每次都毗连到办事器。可是前面的题目是你须要利用一个Web页面去毗连这个办事器,这个比拟坚苦。你能够或许或许让你的办事器接管毗连,而后些数据到客户端(若是它必然要写的话),封闭毗连并且期待下一个毗连。

在上一个代码的根本上再改良,产生上面的代码来做你的新办事器端:

<?php$commonProtocol = getprotobyname("tcp");$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);socket_bind($socket, "localhost", 1337); //socket_bind() 把socket绑定在一个IP地点和端口上socket_listen($socket);$buffer = "NO DATA";while(true) { // Accept any connections coming in on this socket $connection = socket_accept($socket);//socket_accept() 接管一个Socket毗连 printf("Socket connected"); // Check to see if there is anything in the buffer if($buffer != ""){ printf("Something is in the buffer...sending data..."); socket_write($connection, $buffer . ""); //socket_write() 写数据到socket缓存 printf("Wrote to socket"); }else { printf("No Data in the buffer"); } // Get the input while($data = socket_read($connection, 1024, PHP_NORMAL_READ)){//socket_read() 读取指定长度的数据 $buffer = $data; socket_write($connection, "Information Received"); printf("Buffer: " . $buffer . ""); } socket_close($connection); //socket_close() 封闭一个socket资本 printf("Closed the socket");}

这个办事器端要做甚么呢?它初始化一个socket并且翻开一个缓存收发数据。它期待毗连,一旦产生一个毗连,它将打印“Socket connected”在办事器真个屏幕上。这个办事器查抄缓冲区,若是缓冲区里稀有据,它将把数据发送到毗连过去的计较机。而后它发送这个数据的接管信息,一旦它接管了信息,就把信息保管到数据里,并且让毗连的计较机晓得这些信息,最初封闭毗连。当毗连封闭后,办事器又起头处置下一次毗连。

产生一个 socket 客户端

处置第二个题目是很轻易的。你须要产生一个php页毗连一个socket,发送一些数据进它的缓存并处置它。而后你有个处置后的数据在还顿,你能够或许或许发送你的数据到办事器。在别的一台客户端毗连,它将处置那些数据。

上面的例子树模了利用socket:

<?php// Create the socket and connect$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);$connection = socket_connect($socket,"localhost", 1337);while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) { if($buffer == "NO DATA") { echo("<p>NO DATA</p>"); break; }else{ // Do something with the data in the buffer echo("<p>Buffer Data: " . $buffer . "</p>"); }}echo("<p>Writing to Socket</p>");// Write some test data to our socketif(!socket_write($socket, "SOME DATA")){ echo("<p>Write failed</p>");}// Read any response from the socket phpernote.comwhile($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)){ echo("<p>Data sent was: SOME DATA<br> Response was:" . $buffer . "</p>");}echo("<p>Done Reading from Socket</p>");

这个例子的代码演示了客户端毗连到办事器。客户端读取数据。若是这是第临时辰达到这个轮回的初次毗连,这个办事器将发送“NO DATA”前往给客户端。若是环境产生了,这个客户端在毗连之上。客户端发送它的数据到办事器,数据发送给办事器,客户端期待呼应。一旦接管到呼应,那末它将把呼应写到屏幕上。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。比来几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

01
05月
PHP session罕见题目集锦及处置体例

1. 毛病提醒 Warning:Cannotsendsessioncookie-headersalreadysent Warning:Can... >>概况

20
05月
微利用,挪动互联时期的变更与机遇-www.y

window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":... >>概况

28
04月
php获得QQ头像并显现的体例

本文实例报告了php获得QQ头像并显现的体例。分享给大师供大师参考。具体阐发以下:比来看到博客留言的头像有点别扭,由于旅客的头像都是统一个头... >>概况

24
04月
css3完成元素环抱中间点规划的体例示例

本文先容了css3完成元素环抱中间点规划的体例示例,分享给大师,具体以下:结果如图:代码完成:<style> *{ ... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站