{"id":419,"title":"php socket\u5b9e\u4f8b","good":0,"bad":0,"hit":1908,"created_at":"2019-01-31 09:54:42","content":"
\u670d\u52a1\u5668\u7aef\u4ee3\u7801\uff1a<\/p>
<?php\n\/**\n * \u8bf4\u660e:socket\u670d\u52a1\u7aef\n *\n * Date: 2019\/1\/30\n * Time: 17:33\n *\/\n\/\/AF_INET IPv4 \u7f51\u7edc\u534f\u8bae\u3002TCP \u548c UDP \u90fd\u53ef\u4f7f\u7528\u6b64\u534f\u8bae\u3002\n\/\/SOCK_STREAM \u63d0\u4f9b\u4e00\u4e2a\u987a\u5e8f\u5316\u7684\u3001\u53ef\u9760\u7684\u3001\u5168\u53cc\u5de5\u7684\u3001\u57fa\u4e8e\u8fde\u63a5\u7684\u5b57\u8282\u6d41\u3002\u652f\u6301\u6570\u636e\u4f20\u9001\u6d41\u91cf\u63a7\u5236\u673a\u5236\u3002TCP \u534f\u8bae\u5373\u57fa\u4e8e\u8fd9\u79cd\u6d41\u5f0f\u5957\u63a5\u5b57\n\/\/\u5982\u679c\u6240\u9700\u7684\u534f\u8bae\u662f TCP \u6216 UDP\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u5e38\u91cf SOL_TCP \u548c SOL_UDP\n$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);\n\/*\u7ed1\u5b9a\u63a5\u6536\u7684\u5957\u63a5\u6d41\u4e3b\u673a\u548c\u7aef\u53e3,\u4e0e\u5ba2\u6237\u7aef\u76f8\u5bf9\u5e94*\/\nif(socket_bind($socket,'127.0.0.1',8888) == false){\n echo 'server bind fail:'.socket_strerror(socket_last_error());\n \/*\u8fd9\u91cc\u7684127.0.0.1\u662f\u5728\u672c\u5730\u4e3b\u673a\u6d4b\u8bd5\uff0c\u4f60\u5982\u679c\u6709\u591a\u53f0\u7535\u8111\uff0c\u53ef\u4ee5\u5199IP\u5730\u5740*\/\n}\n\/\/\u76d1\u542c\u5957\u63a5\u6d41,4\u8868\u793a\u8fde\u63a5\u961f\u5217\u5141\u8bb8\u7684\u6700\u5927\u5ba2\u6237\u7aef\u8fde\u63a5\u6570\nif(socket_listen($socket,4)==false){\n echo 'server listen fail:'.socket_strerror(socket_last_error());\n}\n\/\/\u8ba9\u670d\u52a1\u5668\u65e0\u9650\u83b7\u53d6\u5ba2\u6237\u7aef\u4f20\u8fc7\u6765\u7684\u4fe1\u606f\ndo{\n \/*\u63a5\u6536\u5ba2\u6237\u7aef\u4f20\u8fc7\u6765\u7684\u4fe1\u606f*\/\n $accept_resource = socket_accept($socket);\n \/*socket_accept\u7684\u4f5c\u7528\u5c31\u662f\u63a5\u53d7socket_bind()\u6240\u7ed1\u5b9a\u7684\u4e3b\u673a\u53d1\u8fc7\u6765\u7684\u5957\u63a5\u6d41*\/\n\n if($accept_resource !== false){\n \/*\u8bfb\u53d6\u5ba2\u6237\u7aef\u4f20\u8fc7\u6765\u7684\u8d44\u6e90\uff0c\u5e76\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32*\/\n $string = socket_read($accept_resource,1024);\n \/*socket_read\u7684\u4f5c\u7528\u5c31\u662f\u8bfb\u51fasocket_accept()\u7684\u8d44\u6e90\u5e76\u628a\u5b83\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32*\/\n\n echo 'server receive is :'.$string.PHP_EOL;\/\/PHP_EOL\u4e3aphp\u7684\u6362\u884c\u9884\u5b9a\u4e49\u5e38\u91cf\n if($string != false){\n $return_client = 'server receive is : '.$string.PHP_EOL;\n \/*\u5411socket_accept\u7684\u5957\u63a5\u6d41\u5199\u5165\u4fe1\u606f\uff0c\u4e5f\u5c31\u662f\u56de\u9988\u4fe1\u606f\u7ed9socket_bind()\u6240\u7ed1\u5b9a\u7684\u4e3b\u673a\u5ba2\u6237\u7aef*\/\n socket_write($accept_resource,$return_client,strlen($return_client));\n \/*socket_write\u7684\u4f5c\u7528\u662f\u5411socket_create\u7684\u5957\u63a5\u6d41\u5199\u5165\u4fe1\u606f\uff0c\u6216\u8005\u5411socket_accept\u7684\u5957\u63a5\u6d41\u5199\u5165\u4fe1\u606f*\/\n }else{\n echo 'socket_read is fail';\n }\n \/*socket_close\u7684\u4f5c\u7528\u662f\u5173\u95edsocket_create()\u6216\u8005socket_accept()\u6240\u5efa\u7acb\u7684\u5957\u63a5\u6d41*\/\n socket_close($accept_resource);\n }\n}while(true);\nsocket_close($socket);<\/pre>
<\/p>\u5ba2\u6237\u7aef\u4ee3\u7801\uff1a<\/p>
<?php\n\/**\n * \u8bf4\u660e:socket\u5ba2\u6237\u7aef\n *\n * Date: 2019\/1\/30\n * Time: 17:36\n *\/\n\n\/\/\u521b\u5efa\u4e00\u4e2asocket\u5957\u63a5\u6d41\n$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);\n\/****************\u8bbe\u7f6esocket\u8fde\u63a5\u9009\u9879\uff0c\u8fd9\u4e24\u4e2a\u6b65\u9aa4\u4f60\u53ef\u4ee5\u7701\u7565*************\/\n\/\/\u63a5\u6536\u5957\u63a5\u6d41\u7684\u6700\u5927\u8d85\u65f6\u65f6\u95f41\u79d2\uff0c\u540e\u9762\u662f\u5fae\u79d2\u5355\u4f4d\u8d85\u65f6\u65f6\u95f4\uff0c\u8bbe\u7f6e\u4e3a\u96f6\uff0c\u8868\u793a\u4e0d\u7ba1\u5b83\nsocket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));\n\/\/\u53d1\u9001\u5957\u63a5\u6d41\u7684\u6700\u5927\u8d85\u65f6\u65f6\u95f4\u4e3a6\u79d2\nsocket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));\n\/****************\u8bbe\u7f6esocket\u8fde\u63a5\u9009\u9879\uff0c\u8fd9\u4e24\u4e2a\u6b65\u9aa4\u4f60\u53ef\u4ee5\u7701\u7565*************\/\n\n\/\/\u8fde\u63a5\u670d\u52a1\u7aef\u7684\u5957\u63a5\u6d41\uff0c\u8fd9\u4e00\u6b65\u5c31\u662f\u4f7f\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u5668\u7aef\u7684\u5957\u63a5\u6d41\u5efa\u7acb\u8054\u7cfb\nif(socket_connect($socket,'127.0.0.1',8888) == false){\n echo 'connect fail massege:'.socket_strerror(socket_last_error());\n}else{\n $message = 'l love you \u6211\u7231\u4f60 socket';\n \/\/\u8f6c\u4e3aGBK\u7f16\u7801\uff0c\u5904\u7406\u4e71\u7801\u95ee\u9898\uff0c\u8fd9\u8981\u770b\u4f60\u7684\u7f16\u7801\u60c5\u51b5\u800c\u5b9a\uff0c\u6bcf\u4e2a\u4eba\u7684\u7f16\u7801\u90fd\u4e0d\u540c\n \/\/$message = mb_convert_encoding($message,'GBK','UTF-8');\n \/\/\u5411\u670d\u52a1\u7aef\u5199\u5165\u5b57\u7b26\u4e32\u4fe1\u606f\n\n if(socket_write($socket,$message,strlen($message)) == false){\n echo 'fail to write'.socket_strerror(socket_last_error());\n }else{\n echo 'client write success'.PHP_EOL;\n \/\/\u8bfb\u53d6\u670d\u52a1\u7aef\u8fd4\u56de\u6765\u7684\u5957\u63a5\u6d41\u4fe1\u606f\n while($callback = socket_read($socket,1024)){\n echo 'server return message is:'.PHP_EOL.$callback;\n }\n }\n}\nsocket_close($socket);\/\/\u5de5\u4f5c\u5b8c\u6bd5\uff0c\u5173\u95ed\u5957\u63a5\u6d41<\/pre>
<\/p>"}