Table of Contents
PHP’s socket is connected to the server template, and the socket server
Home Backend Development PHP Tutorial PHP socket connects to server template, socket server_PHP tutorial

PHP socket connects to server template, socket server_PHP tutorial

Jul 13, 2016 am 10:18 AM
socket

PHP’s socket is connected to the server template, and the socket server

When sorting out the new framework, I found that some cached data requires external interface access, which is more convenient It is the interface of php, so I temporarily studied how php connects to the java server.

Paste the code first:
  1. <span class="pun"><?</span><span class="pln">php</span>
  2. <span class="pln">require_once </span><span class="str">'CRC16.php'</span><span class="pun">;</span>
  3. <span class="com">/*-----------------------------</span>
  4. <span class="com"> | 向服务器发送数据包</span>
  5. <span class="com"> ------------------------------*/</span>
  6. <span class="kwd">class</span><span class="typ">Server</span><span class="pun">{</span>
  7. <span class="com">//发送数据包</span>
  8. <span class="kwd">public</span><span class="kwd">static</span><span class="kwd">function</span><span class="pln"> sendPacket</span><span class="pun">(</span><span class="pln">$packet</span><span class="pun">,</span><span class="pln"> $host</span><span class="pun">,</span><span class="pln"> $port</span><span class="pun">)</span><span class="pun">{</span>
  9. <span class="pln"> $protocol </span><span class="pun">=</span><span class="str">'tcp'</span><span class="pun">;</span>
  10. <span class="pln"> $get_prot </span><span class="pun">=</span><span class="pln"> getprotobyname </span><span class="pun">(</span><span class="pln"> $protocol </span><span class="pun">);</span>
  11. <span class="com">//创建socket</span>
  12. <span class="pln"> $socket </span><span class="pun">=</span><span class="pln"> socket_create </span><span class="pun">(</span><span class="pln"> AF_INET</span><span class="pun">,</span><span class="pln"> SOCK_STREAM</span><span class="pun">,</span><span class="pln"> $get_prot </span><span class="pun">);</span>
  13. <span class="com">//建立连接</span>
  14. <span class="pln"> $conn </span><span class="pun">=</span><span class="pln"> socket_connect </span><span class="pun">(</span><span class="pln"> $socket</span><span class="pun">,</span><span class="pln"> $host</span><span class="pun">,</span><span class="pln"> $port </span><span class="pun">);</span>
  15. <span class="kwd">if</span><span class="pun">(!</span><span class="pln">$conn</span><span class="pun">){</span>
  16. <span class="pln"> socket_close</span><span class="pun">(</span><span class="pln">$socket</span><span class="pun">);</span>
  17. <span class="kwd">exit</span><span class="pun">(</span><span class="str">"socket connect failed!"</span><span class="pun">);</span>
  18. <span class="pun">}</span>
  19. <span class="pln"> $buffer </span><span class="pun">=</span><span class="lit">@socket_read</span><span class="pun">(</span><span class="pln">$socket</span><span class="pun">,</span><span class="lit">9</span><span class="pun">,</span><span class="pln"> PHP_NORMAL_READ</span><span class="pun">);</span> $buffer
  20. =<span class="pln"> $crcCode </span><span class="pun">=</span><span class="pun">(</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$buffer</span><span class="pun">[</span><span class="lit">7</span><span class="pun">])<<</span><span class="lit">8</span><span class="pun">)+</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$buffer</span><span class="pun">[</span><span class="lit">8</span><span class="pun">]);</span>@socket_read
  21. (<span class="pln"> $len </span><span class="pun">=</span><span class="pln"> strlen</span><span class="pun">(</span><span class="pln">$packet</span><span class="pun">);</span>$socket
  22. ,<span class="pln"> $newpacket </span><span class="pun">=</span><span class="pln"> CRC16</span><span class="pun">::</span><span class="pln">encode</span><span class="pun">(</span><span class="pln">$packet</span><span class="pun">,</span><span class="pln"> $crcCode</span><span class="pun">,</span><span class="lit">4</span><span class="pun">);</span>9
  23. ,<span class="pln"> socket_send </span><span class="pun">(</span><span class="pln"> $socket</span><span class="pun">,</span><span class="pln"> $newpacket</span><span class="pun">,</span><span class="pln"> $len</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span> PHP_NORMAL_READ
  24. );<span class="com">//等待接受</span>
  25. <span class="pln"> $head </span><span class="pun">=</span><span class="lit">@socket_read</span><span class="pun">(</span><span class="pln">$socket</span><span class="pun">,</span><span class="lit">4</span><span class="pun">,</span><span class="pln">PHP_NORMAL_READ</span><span class="pun">);</span>
  26. $crcCode
  27. <span class="pln"> $len </span><span class="pun">=</span><span class="pun">(</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$head</span><span class="pun">[</span><span class="lit">0</span><span class="pun">])<<</span><span class="lit">24</span><span class="pun">)+(</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$head</span><span class="pun">[</span><span class="lit">1</span><span class="pun">])<<</span><span class="lit">16</span><span class="pun">)+(</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$head</span><span class="pun">[</span><span class="lit">2</span><span class="pun">])<<</span><span class="lit">8</span><span class="pun">)+</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">$head</span><span class="pun">[</span><span class="lit">3</span><span class="pun">]);</span>=
  28. (<span class="pln"> $content </span><span class="pun">=</span><span class="lit">@socket_read</span><span class="pun">(</span><span class="pln">$socket</span><span class="pun">,</span><span class="pln">$len</span><span class="pun">-</span><span class="lit">4</span><span class="pun">,</span><span class="pln">PHP_NORMAL_READ</span><span class="pun">);</span>ord
  29. (<span class="pln"> socket_close </span><span class="pun">(</span><span class="pln"> $socket </span><span class="pun">);</span>$buffer
  30. [<span class="kwd">return</span><span class="pln"> substr</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">,</span><span class="lit">3</span><span class="pun">);</span>7
  31. ])<<<span class="lit">8<span class="pun">)+<span class="pln">ord(<span class="pln">$buffer[<span class="lit">8]); <span class="pln"> $len =<span class="pln"> strlen(<span class="pln">$packet); <span class="pln"> $newpacket =<span class="pln"> CRC16::<span class="pln">encode(<span class="pln">$packet,<span class="pln"> $crcCode,<span class="lit">4); <span class="pln"> socket_send (<span class="pln"> $socket,<span class="pln"> $newpacket,<span class="pln"> $len,<span class="lit">0); <span class="com">//等待接受 <span class="pln"> $head =<span class="lit">@socket_read(<span class="pln">$socket,<span class="lit">4,<span class="pln">PHP_NORMAL_READ); <span class="pln"> $len =(<span class="pln">ord(<span class="pln">$head[<span class="lit">0])<<<span class="lit">24)+(<span class="pln">ord(<span class="pln">$head[<span class="lit">1])<<<span class="lit">16)+(<span class="pln">ord(<span class="pln">$head[<span class="lit">2])<<<span class="lit">8)+<span class="pln">ord(<span class="pln">$head[<span class="lit">3]); <span class="pln"> $content =<span class="lit">@socket_read(<span class="pln">$socket,<span class="pln">$len-<span class="lit">4,<span class="pln">PHP_NORMAL_READ); <span class="pln"> socket_close (<span class="pln"> $socket ); <span class="kwd">return<span class="pln"> substr(<span class="pln">$content,<span class="lit">3); }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
  32. <span class="kwd">public</span><span class="kwd">static</span><span class="kwd">function</span><span class="pln"> packet</span><span class="pun">(</span><span class="pln">$group</span><span class="pun">,</span><span class="pln">$cmd</span><span class="pun">,</span><span class="pln">$message</span><span class="pun">){</span>
  33. public
  34. static<span class="pln"> $size </span><span class="pun">=</span><span class="pln"> strlen</span><span class="pun">(</span><span class="pln">$message</span><span class="pun">)+</span><span class="lit">8</span><span class="pun">;</span>function
  35. packet
  36. <span class="pln"> $str </span><span class="pun">=</span><span class="str">''</span><span class="pun">;</span>(
  37. $group
  38. <span class="pln"> $str </span><span class="pun">.=</span><span class="kwd">self</span><span class="pun">::</span><span class="pln">writeInt</span><span class="pun">(</span><span class="pln">$size</span><span class="pun">);</span>,
  39. $cmd
  40. <span class="pln"> $str </span><span class="pun">.=</span><span class="kwd">self</span><span class="pun">::</span><span class="pln">writeByte</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span>,
  41. $message
  42. <span class="pln"> $str </span><span class="pun">.=</span><span class="kwd">self</span><span class="pun">::</span><span class="pln">writeByte</span><span class="pun">(</span><span class="pln">$group</span><span class="pun">);</span>){
  43. <span class="pln"> $str </span><span class="pun">.=</span><span class="kwd">self</span><span class="pun">::</span><span class="pln">writeByte</span><span class="pun">(</span><span class="pln">$cmd</span><span class="pun">);</span>
  44. $size <span class="pln"> $str </span><span class="pun">.=</span><span class="kwd">self</span><span class="pun">::</span><span class="pln">writeByte</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span>
  45. =
  46. strlen<span class="pln"> $str </span><span class="pun">.=</span><span class="pln"> $message</span><span class="pun">;</span>
  47. (
  48. $message<span class="kwd">return</span><span class="pln"> $str</span><span class="pun">;</span>
  49. )+
  50. 8<span class="pun">}</span>
  51. ;
  52. <span class="com">//写进2个byte的数据</span> $str
  53. =<span class="kwd">private</span><span class="kwd">static</span><span class="kwd">function</span><span class="pln"> writeShort</span><span class="pun">(</span><span class="pln">$s</span><span class="pun">)</span><span class="pun">{</span>''
  54. ;<span class="kwd">return</span><span class="pln"> pack </span><span class="pun">(</span><span class="str">"n"</span><span class="pun">,</span><span class="pln"> $s </span><span class="pun">);</span>
  55. <span class="pun">}</span>
  56. $str
  57. <span class="com">//写进4个byte的数据</span>.=
  58. self
  59. <span class="kwd">private</span><span class="kwd">static</span><span class="kwd">function</span><span class="pln"> writeInt</span><span class="pun">(</span><span class="pln">$N</span><span class="pun">)</span><span class="pun">{</span>::
  60. writeInt
  61. <span class="kwd">return</span><span class="pln"> pack </span><span class="pun">(</span><span class="str">"N"</span><span class="pun">,</span><span class="pln"> $N </span><span class="pun">);</span>(
  62. $size
  63. <span class="pun">}</span>);
  64. <span class="com">//写进1个byte的数据</span>
  65. $str <span class="kwd">private</span><span class="kwd">static</span><span class="kwd">function</span><span class="pln"> writeByte</span><span class="pun">(</span><span class="pln">$b</span><span class="pun">)</span><span class="pun">{</span>
  66. .=
  67. self<span class="kwd">return</span><span class="pln"> pack </span><span class="pun">(</span><span class="str">"c"</span><span class="pun">,</span><span class="pln"> $b </span><span class="pun">);</span>
  68. ::
  69. writeByte<span class="pun">(<span class="lit">0); <span class="pln"> $str .=<span class="kwd">self::<span class="pln">writeByte(<span class="pln">$group); <span class="pln"> $str .=<span class="kwd">self::<span class="pln">writeByte(<span class="pln">$cmd); <span class="pln"> $str .=<span class="kwd">self::<span class="pln">writeByte(<span class="lit">1); <span class="pln"> $str .=<span class="pln"> $message; <span class="kwd">return<span class="pln"> $str; } <span class="com">//写进2个byte的数据 <span class="kwd">private<span class="kwd">static<span class="kwd">function<span class="pln"> writeShort(<span class="pln">$s){ <span class="kwd">return<span class="pln"> pack (<span class="str">"n",<span class="pln"> $s ); } <span class="com">//写进4个byte的数据 <span class="kwd">private<span class="kwd">static<span class="kwd">function<span class="pln"> writeInt(<span class="pln">$N){ <span class="kwd">return<span class="pln"> pack (<span class="str">"N",<span class="pln"> $N ); } <span class="com">//写进1个byte的数据 <span class="kwd">private<span class="kwd">static<span class="kwd">function<span class="pln"> writeByte(<span class="pln">$b){ <span class="kwd">return<span class="pln"> pack (<span class="str">"c",<span class="pln"> $b ); }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
  70. }<span class="pun">}</span>

Because after the personal server is connected, a crcCode verification code will be assigned, and the sent message needs to be encrypted by crc16 (actually very simple, keep it mysterious), so first wait for the fixed length to be accepted to obtain the crcCode, and then send the request. Wait for the packet to be accepted and return.

From Wiz Notes (Wiz)

How does PHP's Socket communicate with each other between the server and the client?


The server provides a data buffer and provides a user identification mechanism. This is used to send corresponding information to both chat users.
What seems like user-to-user communication is actually the user communicating with the server.
My little understanding

php socket cannot connect


Check the port

http://www.bkjia.com/PHPjc/880092.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/880092.htmlTechArticlePHP’s socket is connected to the server template. When the socket server was sorting out the new framework, it found that some cached data , requires external interface access, and the more convenient one is the php interface,...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

IO multiplexing of PHP+Socket series and implementation of web server IO multiplexing of PHP+Socket series and implementation of web server Feb 02, 2023 pm 01:43 PM

This article brings you relevant knowledge about php+socket, which mainly introduces IO multiplexing and how php+socket implements web server? Friends who are interested can take a look below. I hope it will be helpful to everyone.

How to use Python's socket and socketserver How to use Python's socket and socketserver May 28, 2023 pm 08:10 PM

1. Socket programming based on TCP protocol 1. The socket workflow starts with the server side. The server first initializes the Socket, then binds to the port, listens to the port, calls accept to block, and waits for the client to connect. At this time, if a client initializes a Socket and then connects to the server (connect), if the connection is successful, the connection between the client and the server is established. The client sends a data request, the server receives the request and processes the request, then sends the response data to the client, the client reads the data, and finally closes the connection. An interaction ends. Use the following Python code to implement it: importso

How to use Spring Boot+Vue to implement Socket notification push How to use Spring Boot+Vue to implement Socket notification push May 27, 2023 am 08:47 AM

The first step on the SpringBoot side is to introduce dependencies. First we need to introduce the dependencies required for WebSocket, as well as the dependencies for processing the output format com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket. The second step is to create the WebSocket configuration class importorg. springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config

Common network communication and security problems and solutions in C# Common network communication and security problems and solutions in C# Oct 09, 2023 pm 09:21 PM

Common network communication and security problems and solutions in C# In today's Internet era, network communication has become an indispensable part of software development. In C#, we usually encounter some network communication problems, such as data transmission security, network connection stability, etc. This article will discuss in detail common network communication and security issues in C# and provide corresponding solutions and code examples. 1. Network communication problems Network connection interruption: During the network communication process, the network connection may be interrupted, which may cause

What to do if php socket cannot connect What to do if php socket cannot connect Nov 09, 2022 am 10:34 AM

Solution to the problem that the php socket cannot be connected: 1. Check whether the socket extension is enabled in php; 2. Open the php.ini file and check whether "php_sockets.dll" is loaded; 3. Uncomment "php_sockets.dll".

PHP+Socket series realizes data transmission between client and server PHP+Socket series realizes data transmission between client and server Feb 02, 2023 am 11:35 AM

This article brings you relevant knowledge about php+socket. It mainly introduces what is socket? How does php+socket realize client-server data transmission? Friends who are interested can take a look below. I hope it will be helpful to everyone.

Methods and techniques for implementing Socket communication in PHP Methods and techniques for implementing Socket communication in PHP Mar 07, 2024 pm 02:06 PM

PHP is a commonly used development language that can be used to develop various web applications. In addition to common HTTP requests and responses, PHP also supports network communication through Sockets to achieve more flexible and efficient data interaction. This article will introduce the methods and techniques of how to implement Socket communication in PHP, and attach specific code examples. What is Socket Communication Socket is a method of communication in a network that can transfer data between different computers. by S

Research on real-time file transfer technology using PHP and Socket Research on real-time file transfer technology using PHP and Socket Jun 28, 2023 am 09:11 AM

With the development of the Internet, file transfer has become an indispensable part of people's daily work and entertainment. However, traditional file transfer methods such as email attachments or file sharing websites have certain limitations and cannot meet the needs of real-time and security. Therefore, using PHP and Socket technology to achieve real-time file transfer has become a new solution. This article will introduce the technical principles, advantages and application scenarios of using PHP and Socket technology to achieve real-time file transfer, and demonstrate the implementation method of this technology through specific cases. technology

See all articles