美工统筹SEO,为企业电子商务营销助力!
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中对于socket的系列函数总结 | 下一篇:php完成粘贴截图并完成上传功效