{"id":52,"date":"2011-10-13T11:14:28","date_gmt":"2011-10-13T03:14:28","guid":{"rendered":"http:\/\/www.magki.com\/blog\/?p=52"},"modified":"2011-10-13T11:14:28","modified_gmt":"2011-10-13T03:14:28","slug":"php-socket-example","status":"publish","type":"post","link":"http:\/\/www.ijony.com\/blog\/2011\/10\/php-socket-example.html","title":{"rendered":"PHP Socket \u8303\u4f8b"},"content":{"rendered":"<p>Server.php&nbsp;\u4ee3\u7801<\/p>\n<p>&lt;?php<br \/>\nheader(&#8220;Content-type:&nbsp;text\/html;&nbsp;charset=utf-8&#8221;);<br \/>\n\/\/\u786e\u4fdd\u5728\u8fde\u63a5\u5ba2\u6237\u7aef\u65f6\u4e0d\u4f1a\u8d85\u65f6<br \/>\nset_time_limit(0);<\/p>\n<p>\/\/\u8bbe\u7f6eIP\u548c\u7aef\u53e3\u53f7<br \/>\n$address&nbsp;=&nbsp;&#8216;127.0.0.1&#8217;;<br \/>\n$port&nbsp;=&nbsp;8080;<\/p>\n<p>\/\/\u521b\u5efa\u4e00\u4e2aSOCKET<br \/>\nif(($sock&nbsp;=&nbsp;socket_create(AF_INET,&nbsp;SOCK_STREAM,&nbsp;SOL_TCP))&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_create()&nbsp;\u5931\u8d25\u7684\u539f\u56e0\u662f:&#8221;&nbsp;.&nbsp;socket_strerror($sock)&nbsp;.&nbsp;&#8220;&lt;br&gt;&#8221;;<br \/>\n}<\/p>\n<p>\/\/\u7ed1\u5b9a\u5230socket\u7aef\u53e3<br \/>\nif(($ret&nbsp;=&nbsp;socket_bind($sock,&nbsp;$address,&nbsp;$port))&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_bind()&nbsp;\u5931\u8d25\u7684\u539f\u56e0\u662f:&#8221;&nbsp;.&nbsp;socket_strerror($ret)&nbsp;.&nbsp;&#8220;&lt;br&gt;&#8221;;<br \/>\n}<\/p>\n<p>\/\/\u5f00\u59cb\u76d1\u542c<br \/>\nif(($ret&nbsp;=&nbsp;socket_listen($sock,&nbsp;4))&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_listen()&nbsp;\u5931\u8d25\u7684\u539f\u56e0\u662f:&#8221;&nbsp;.&nbsp;socket_strerror($ret)&nbsp;.&nbsp;&#8220;&lt;br&gt;&#8221;;<br \/>\n}<\/p>\n<p>$buf&nbsp;=&nbsp;&#8221;;<\/p>\n<p>do{<br \/>\n&nbsp;&nbsp;&nbsp;if(($msgsock&nbsp;=&nbsp;socket_accept($sock))&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_accept()&nbsp;failed:&nbsp;reason:&nbsp;&#8221;&nbsp;.&nbsp;socket_strerror($msgsock)&nbsp;.&nbsp;&#8220;\\n&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br \/>\n&nbsp;&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;&nbsp;<br \/>\n&nbsp;&nbsp;&nbsp;$msg&nbsp;=&nbsp;&#8220;&lt;font&nbsp;color=red&gt;\u6b22\u8fce\u8fdb\u5165\u670d\u52a1\u5668\uff01&lt;\/font&gt;&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;socket_write($msgsock,&nbsp;$msg,&nbsp;strlen($msg));<\/p>\n<p>&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u8bfb\u53d6\u5ba2\u6237\u7aef\u53d1\u6765\u7684\u4fe1\u606f&lt;br&gt;&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;$buf&nbsp;=&nbsp;socket_read($msgsock,&nbsp;8192);<\/p>\n<p>&nbsp;&nbsp;&nbsp;echo&nbsp;$talkback&nbsp;=&nbsp;&#8220;\u6536\u5230\u7684\u4fe1\u606f\uff1a$buf&lt;br&gt;&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;<br \/>\n&nbsp;&nbsp;&nbsp;if(socket_write($msgsock,&nbsp;&#8220;\u4fe1\u606f\u63a5\u6536\u6210\u529f&#8221;,&nbsp;strlen(&#8220;\u4fe1\u606f\u63a5\u6536\u6210\u529f&#8221;))&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_write()&nbsp;failed:&nbsp;reason:&nbsp;&#8221;&nbsp;.&nbsp;socket_strerror($msgsock)&nbsp;.&nbsp;&#8220;\\n&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;}else{<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u53cd\u9988\u5ba2\u6237\u7aef\u6210\u529f&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;&nbsp;<br \/>\n&nbsp;&nbsp;&nbsp;socket_close($msgsock);<br \/>\n}while(!$buf);<\/p>\n<p>socket_close($sock);<br \/>\n?&gt;<\/p>\n<p><!--more--><\/p>\n<p>client.php&nbsp;\u4ee3\u7801<\/p>\n<p>&lt;?php<br \/>\nheader(&#8220;Content-type:&nbsp;text\/html;&nbsp;charset=utf-8&#8221;);<br \/>\nerror_reporting(E_ALL);<br \/>\nset_time_limit(0);<br \/>\necho&nbsp;&#8220;&lt;h2&gt;TCP\/IP&nbsp;Connection&lt;\/h2&gt;\\n&#8221;;<\/p>\n<p>$service_port&nbsp;=&nbsp;8080;<br \/>\n$address&nbsp;=&nbsp;&#8220;127.0.0.1&#8221;;<\/p>\n<p>$socket&nbsp;=&nbsp;socket_create(AF_INET,&nbsp;SOCK_STREAM,&nbsp;SOL_TCP);<br \/>\nif($socket&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_create()&nbsp;failed:&nbsp;reason:&nbsp;&#8221;&nbsp;.&nbsp;socket_strerror($socket)&nbsp;.&nbsp;&#8220;\\n&#8221;;<br \/>\n}else{<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;OK.\\n&#8221;;<br \/>\n}<\/p>\n<p>echo&nbsp;&#8220;\u8bd5\u56fe\u8fde\u63a5&nbsp;&#8216;$address&#8217;&nbsp;\u7aef\u53e3&nbsp;&#8216;$service_port&#8217;&#8230;&lt;br&gt;&#8221;;<br \/>\n$result&nbsp;=&nbsp;socket_connect($socket,&nbsp;$address,&nbsp;$service_port);<br \/>\nif($result&nbsp;&lt;&nbsp;0){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_connect()&nbsp;failed.\\nReason:&nbsp;($result)&nbsp;&#8221;&nbsp;.&nbsp;socket_strerror($result)&nbsp;.&nbsp;&#8220;\\n&#8221;;<br \/>\n}else{<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u8fde\u63a5OK&lt;br&gt;&#8221;;<br \/>\n}<\/p>\n<p>$in&nbsp;=&nbsp;&#8220;Hello&nbsp;World\\r\\n&#8221;;<br \/>\n$out&nbsp;=&nbsp;&#8221;;<\/p>\n<p>if(!socket_write($socket,&nbsp;$in,&nbsp;strlen($in))){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;socket_write()&nbsp;failed:&nbsp;reason:&nbsp;&#8221;&nbsp;.&nbsp;socket_strerror($socket)&nbsp;.&nbsp;&#8220;\\n&#8221;;<br \/>\n}else{<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u53d1\u9001\u5230\u670d\u52a1\u5668\u4fe1\u606f\u6210\u529f\uff01&lt;br&gt;&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u53d1\u9001\u7684\u5185\u5bb9\u4e3a\uff1a&lt;font&nbsp;color=&#8217;red&#8217;&gt;$in&lt;\/font&gt;&lt;br&gt;&#8221;;<br \/>\n}<\/p>\n<p>while($out&nbsp;=&nbsp;socket_read($socket,&nbsp;8192)){<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u63a5\u6536\u670d\u52a1\u5668\u56de\u4f20\u4fe1\u606f\u6210\u529f\uff01&lt;br&gt;&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;echo&nbsp;&#8220;\u63a5\u53d7\u7684\u5185\u5bb9\u4e3a\uff1a$out&lt;br&nbsp;\/&gt;&#8221;;<br \/>\n}<\/p>\n<p>echo&nbsp;&#8220;\u5173\u95edSOCKET&#8230;&lt;br&gt;&#8221;;<br \/>\nsocket_close($socket);<br \/>\necho&nbsp;&#8220;\u5173\u95edOK&lt;br&gt;&#8221;;<br \/>\n?&gt;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Server.php&nbsp;\u4ee3\u7801 &lt;?php header(&#8220;Content-type: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[23,22],"_links":{"self":[{"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/posts\/52"}],"collection":[{"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":0,"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.ijony.com\/blog\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}