The examples in this article describe the socket communication mechanism and usage in php. Share it with everyone for your reference. The specific analysis is as follows:
1. What is a socket?
What is a socket? The so-called socket is usually also called a "socket", which is used to describe the IP address and port, and is the handle of a communication chain. Applications usually make requests to the network or respond to network requests through "sockets". To put it bluntly, it is a communication mechanism. It is similar to the telephone customer service departments of banks, telecommunications and other departments. When you call, a person will be assigned to answer your questions. The customer service department is equivalent to the server side of the socket, and your side is equivalent to the client. Before the call ends with you, if someone is on It is impossible to talk to the person you are talking to because you are communicating with him. Of course, the telephone switchboard of the customer service department will not be duplicated.
I will give an example below to explain how socket works. If you are developing based on the application layer, you do not necessarily need to understand the principle, but it is better to know. There are php apis about sockets on the Internet. Just put it down and use it.
2. Socket server server.php
<?php // 建立server端socket $tcp = getprotobyname("tcp"); $socket = socket_create(af_inet, sock_stream, $tcp); socket_bind($socket, '127.0.0.1', 10008); //绑定要监听的端口 socket_listen($socket); //监听端口 //初始化一个数据,和客户端通信 $buffer = "connect"; while (true) { // 接受一个socket连接 $connection = socket_accept($socket); if(!$connection){ echo "connect fail"; }else{ echo "socket connected "; // 向客户端传递一个信息数据 if ($buffer != "") { echo "send data to client "; socket_write($connection, $buffer . " "); echo "wrote to socket "; } else { echo "no data in the buffer " ; } // 从客户端取得信息 while ($data = @socket_read($connection, 1024, php_normal_read)) { printf("buffer: " . $data . " "); //取得信息给客户端一个反馈 socket_write($connection, "information received "); } } socket_close($connection); //关闭 socket printf("closed the socket "); } ?>
3. Socket client client.php
<?php // 建立客户端的socet连接 $socket = socket_create(af_inet, sock_stream, sol_tcp); $connection = socket_connect($socket, '127.0.0.1', 10008); //连接服务器端socket while ($buffer = @socket_read($socket, 1024, php_normal_read)) { //服务端告诉客户端,自己的状态 if (preg_match("/not connect/",$buffer)) { echo "don`t connect "; break; } else { //服务器传来信息 echo "buffer data: " . $buffer . " "; echo "writing to socket "; // 将客户的信息写到通道中,传给服务器端 if (!socket_write($socket, "some data ")) { echo "write failed "; } //服务器端收到信息后,给于的回应信息 while ($buffer = socket_read($socket, 1024, php_normal_read)) { echo "sent to server: some data response from server was:" . $buffer . " "; } } } ?>
4. A picture of the communication mechanism (automatically closing the socket regardless of the waiting time)
A brief explanation, before explaining I want to talk about why you need to use php commands to execute the server and client. For the client, you use fsockopen. If you access it on the browser, the connection will time out. Why is this? Because when you create a socket, it will constantly monitor whether the client wants to connect.
The establishment of socket communication requires two socket channels, one created by the server and one created by the client.
Line 1, the server creates a socket channel, puts the information in the cache, and waits for the client to connect
Line 2, the client creates a socket channel and connects to the server to obtain the server-side information for communication, which will be transmitted The information is sent to channel
Line 3. The server gets the information from the client and tells the client that I have received the information. Send the information to be transmitted to the channel
Line 4, and the client obtains the confirmation information from the server
At this point, the communication is completely established. After the data transmission is completed, the server will disconnect the socket communication. The specific operation is as follows.
1 Run the socket server
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php interactive mode enabled
What kind of work has this done
a Listen to a 10008 port
[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008 tcp 0 0 127.0.0.1:10008 0.0.0.0:* listen [zhangy@blackghost ~]$
b Send the information to the cache
$buffer = "connect";
Look at the code above
2 Run the socket client
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php interactive mode enabled buffer data: connect writing to socket sent to server: some data response from server was:information received
3 Back to the server side
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php interactive mode enabled socket connected send data to client wrote to socket buffer: some data closed the socket
I hope this article will be helpful to everyone’s PHP programming design.
For more detailed explanations of socket communication mechanism examples in PHP and related articles, please pay attention to the PHP Chinese website!