


PHP socket connects to server template, socket server_PHP tutorial
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:<span class="pun"><?</span><span class="pln">php</span>
<span class="pln">require_once </span><span class="str">'CRC16.php'</span><span class="pun">;</span>
<span class="com">/*-----------------------------</span>
<span class="com"> | 向服务器发送数据包</span>
<span class="com"> ------------------------------*/</span>
<span class="kwd">class</span><span class="typ">Server</span><span class="pun">{</span>
<span class="com">//发送数据包</span>
<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>
<span class="pln"> $protocol </span><span class="pun">=</span><span class="str">'tcp'</span><span class="pun">;</span>
<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>
<span class="com">//创建socket</span>
<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>
<span class="com">//建立连接</span>
<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>
<span class="kwd">if</span><span class="pun">(!</span><span class="pln">$conn</span><span class="pun">){</span>
<span class="pln"> socket_close</span><span class="pun">(</span><span class="pln">$socket</span><span class="pun">);</span>
<span class="kwd">exit</span><span class="pun">(</span><span class="str">"socket connect failed!"</span><span class="pun">);</span>
<span class="pun">}</span>
-
<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 - =
<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 - (
<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 - ,
<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 - ,
<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 - );
<span class="com">//等待接受</span>
-
<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>
$crcCode -
<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>
= - (
<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 - (
<span class="pln"> socket_close </span><span class="pun">(</span><span class="pln"> $socket </span><span class="pun">);</span>
$buffer - [
<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 - ])<<
<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>
-
<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>
public - 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
packet -
<span class="pln"> $str </span><span class="pun">=</span><span class="str">''</span><span class="pun">;</span>
(
$group -
<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>
,
$cmd -
<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>
,
$message -
<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>
){ -
<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>
- $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>
= - strlen
<span class="pln"> $str </span><span class="pun">.=</span><span class="pln"> $message</span><span class="pun">;</span>
( - $message
<span class="kwd">return</span><span class="pln"> $str</span><span class="pun">;</span>
)+ - 8
<span class="pun">}</span>
; -
<span class="com">//写进2个byte的数据</span>
$str - =
<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>
'' - ;
<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>
-
<span class="pun">}</span>
$str -
<span class="com">//写进4个byte的数据</span>
.=
self -
<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>
::
writeInt -
<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>
(
$size -
<span class="pun">}</span>
); -
<span class="com">//写进1个byte的数据</span>
- $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>
.= - 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>
:: - 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>
}
<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)
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
Check the port

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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.

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

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# 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

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".

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.

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

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
