Examples
This example shows a simple talkback server. Change the address and port variables to suit your setup and execute. You may then connect to the server with a command similar to: telnet 192.168.1.53 10000 (where the address and port match your setup). Anything you type will then be output on the server side, and echoed back to you. To disconnect, enter ‘quit’.
#!/usr/local/bin/php -q
error_reporting ( E_ALL );
/* Allow the script to hang around waiting for connections. */
set_time_limit ( 0 );
/* Turn on implicit output flushing so we see what we’re getting
* as it comes in. */
ob_implicit_flush ();
$address = ‘192.168.1.53’ ;
$port = 10000 ;
if (( $sock = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP )) === false ) echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
>
if ( socket_bind ( $sock , $address , $port ) === false ) echo «socket_bind() failed: reason: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>
if ( socket_listen ( $sock , 5 ) === false ) echo «socket_listen() failed: reason: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>
do if (( $msgsock = socket_accept ( $sock )) === false ) echo «socket_accept() failed: reason: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
break;
>
/* Send instructions. */
$msg = «\nWelcome to the PHP Test Server. \n» .
«To quit, type ‘quit’. To shut down the server type ‘shutdown’.\n» ;
socket_write ( $msgsock , $msg , strlen ( $msg ));
do if ( false === ( $buf = socket_read ( $msgsock , 2048 , PHP_NORMAL_READ ))) echo «socket_read() failed: reason: » . socket_strerror ( socket_last_error ( $msgsock )) . «\n» ;
break 2 ;
>
if (! $buf = trim ( $buf )) continue;
>
if ( $buf == ‘quit’ ) break;
>
if ( $buf == ‘shutdown’ ) socket_close ( $msgsock );
break 2 ;
>
$talkback = «PHP: You said ‘ $buf ‘.\n» ;
socket_write ( $msgsock , $talkback , strlen ( $talkback ));
echo » $buf \n» ;
> while ( true );
socket_close ( $msgsock );
> while ( true );
Example #2 Socket example: Simple TCP/IP client
This example shows a simple, one-shot HTTP client. It simply connects to a page, submits a HEAD request, echoes the reply, and exits.
echo «
TCP/IP Connection
\n» ;
/* Get the port for the WWW service. */
$service_port = getservbyname ( ‘www’ , ‘tcp’ );
/* Get the IP address for the target host. */
$address = gethostbyname ( ‘www.example.com’ );
/* Create a TCP/IP socket. */
$socket = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP );
if ( $socket === false ) echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
> else echo «OK.\n» ;
>
echo «Attempting to connect to ‘ $address ‘ on port ‘ $service_port ‘. » ;
$result = socket_connect ( $socket , $address , $service_port );
if ( $result === false ) echo «socket_connect() failed.\nReason: ( $result ) » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
> else echo «OK.\n» ;
>
$in = «HEAD / HTTP/1.1\r\n» ;
$in .= «Host: www.example.com\r\n» ;
$in .= «Connection: Close\r\n\r\n» ;
$out = » ;
echo «Sending HTTP HEAD request. » ;
socket_write ( $socket , $in , strlen ( $in ));
echo «OK.\n» ;
echo «Reading response:\n\n» ;
while ( $out = socket_read ( $socket , 2048 )) echo $out ;
>
echo «Closing socket. » ;
socket_close ( $socket );
echo «OK.\n\n» ;
?>
User Contributed Notes 3 notes
You can easily extend the first example to handle any number of connections instead of jsut one
#!/usr/bin/env php
error_reporting ( E_ALL );
/* Permitir al script esperar para conexiones. */
set_time_limit ( 0 );
/* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
* mientras llega. */
ob_implicit_flush ();
$address = ‘127.0.0.1’ ;
$port = 10000 ;
if (( $sock = socket_create ( AF_INET , SOCK_STREAM , SOL_TCP )) === false ) echo «socket_create() falló: razón: » . socket_strerror ( socket_last_error ()) . «\n» ;
>
if ( socket_bind ( $sock , $address , $port ) === false ) echo «socket_bind() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>
if ( socket_listen ( $sock , 5 ) === false ) echo «socket_listen() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
>
//clients array
$clients = array();
do $read = array();
$read [] = $sock ;
$read = array_merge ( $read , $clients );
// Set up a blocking call to socket_select
if( socket_select ( $read , $write = NULL , $except = NULL , $tv_sec = 5 ) < 1 )
// SocketServer::debug(«Problem blocking socket_select?»);
continue;
>
// Handle new Connections
if ( in_array ( $sock , $read ))
if (( $msgsock = socket_accept ( $sock )) === false ) echo «socket_accept() falló: razón: » . socket_strerror ( socket_last_error ( $sock )) . «\n» ;
break;
>
$clients [] = $msgsock ;
$key = array_keys ( $clients , $msgsock );
/* Enviar instrucciones. */
$msg = «\nBienvenido al Servidor De Prueba de PHP. \n» .
«Usted es el cliente numero: < $key [ 0 ]>\n» .
«Para salir, escriba ‘quit’. Para cerrar el servidor escriba ‘shutdown’.\n» ;
socket_write ( $msgsock , $msg , strlen ( $msg ));
// Handle Input
foreach ( $clients as $key => $client ) < // for each client
if ( in_array ( $client , $read )) if ( false === ( $buf = socket_read ( $client , 2048 , PHP_NORMAL_READ ))) echo «socket_read() falló: razón: » . socket_strerror ( socket_last_error ( $client )) . «\n» ;
break 2 ;
>
if (! $buf = trim ( $buf )) continue;
>
if ( $buf == ‘quit’ ) unset( $clients [ $key ]);
socket_close ( $client );
break;
>
if ( $buf == ‘shutdown’ ) socket_close ( $client );
break 2 ;
>
$talkback = «Cliente < $key >: Usted dijo ‘ $buf ‘.\n» ;
socket_write ( $client , $talkback , strlen ( $talkback ));
echo » $buf \n» ;
>
Socket Programming in PHP
All the programming languages provide the mechanism to implement the server and client communication. As per this mechanism, the application enables the server and the client to exchange data between them. Similar to the other programming languages, PHP also provides us with this mechanism. Socket programming can be defined as the programming approach that has the server and the client as the application where a connection has to be established between both of them to facilitate the communication between them. In terms of PHP, it also lets us implement the concept of socket programming. In this article, we will learn how to implement this socket programming using the PHP programming language.
Web development, programming languages, Software testing & others
Socket Class Methods
The socket class methods are the special functions that let us implement the socket programming. The program that has to be written in order to bring the functionalities of socket programming uses the predefined socket functions. These functions consist of the statements that perform the actual role in socket programming. Below are some of the socket functions.
- Socket_accept: This is one of the very common socket functions used to accept a socket connection. The primary role of this function is to let the connection accepted whenever a request hits.
- Socket_addrinfo_bind: This function is used to add the provided information to the socket. The information accepted has to be assigned to the socket to facilitate its implementation.
- Socket_clear_error: This function is used to clear the error that is on the socket. In addition to that, this function also clears the error on the last code.
- Socket_close: As the name states, this function is used to close the resource that belongs to the socket.
- Socket_connect: This method is used to create a socket connection. In socket programming, the program begins with the establishment of the connection, which can be done using this function.
- Socket_create: This method is concerned with the creation of the socket. The socket created using this method works as the endpoint of the connection.
- Socket_create_listen: This function is used to get the socket to open the specified port that accepts the connection. As the name states, it helps in opening the socket for listening.
- Socket_create_pair: This method is usually used in the application that needs to bring the complex part of socket programming in use. It helps in the creation of the indistinguishable sockets, and those are stored in the array.
- Socket_get_option: This method is used to get the options for the socket. A socket is comprised of several options that have to be used in accordance with the application. By using this method, we can get all those options that a socket has.
- Socket_getsockname: This method is used to query the local region of the selected socket, and in return, it may get the details related to the host/port or the Unix filesystem path. Whatever outcome it gets is totally dependent on the type.
Socket Client Example
This section will see the code that will be used to implement the client-side socket programming. The example mentioned below will be having the post and the host details that will be used to create the socket connection. One the connection is established, it exchanges some of the messages and expects a response from the server.
In the above example, the port number is 1230 in which the program tries to connect. The IP address of the host will be the localhost’s IP. If anyone is willing to interact with the remote server, they can mention the server’s IP address. Then the message will be sent to the server that will be shown on the response page. The socket creation will be processed afterward. In this program, there is a proper mechanism to handle the error by using the die method. If anything went wrong, in that case, the die method gets revoked, and the message given in that pops up.
Socket Server Example
The example detailed in this section will be having the PHP codes that will be leveraged to implement the socket programming at the server-side. The details of the IP and the port number used in the last example will remain the same in this example as well. This example’s main difference will make the core difference that separates it from the client-side socket programming language. Lets process to understand the PHP code for server-side socket programming.
In the above example, the program has been developed to work in the localhost. The IP address mentioned here belongs to the localhost, and the port number can run the TCP and UDP service on that. The initial step is always the creation of the socket, as it is something that will be used throughout the program. Later the socket has been bonded with the specified values, which will help in functioning. The methods used in this program have a predefined meaning that can be used for a specific purpose. Once everything goes well, the program will work accordingly and will close the socket connection eventually.
Conclusion – Socket Programming in PHP
The socket programming language is used to let the application work on the server and the client model. This approach of programming lets us establish the connection between the server and the client so that the exchange of the data could be facilitated. To make the socket programming easy and convenient, PHP has provided predefined methods where all the methods have some unique tasks assigned to them.
Recommended Articles
This is a guide to Socket Programming in PHP. Here we discuss the methods that let us implement socket programming and how it enables the server and the client to exchange data between them. You may also look at our other related articles to learn more –
502+ Hours of HD Videos
54 Courses
4 Mock Tests & Quizzes
Verifiable Certificate of Completion
Lifetime Access
4.5
57+ Hours of HD Videos
15 Courses
9 Mock Tests & Quizzes
Verifiable Certificate of Completion
Lifetime Access
4.5