Created
March 28, 2014 04:30
-
-
Save oshanz/9825455 to your computer and use it in GitHub Desktop.
Socket
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| error_reporting(~E_NOTICE); | |
| set_time_limit(0); | |
| $address = "192.168.1.60"; | |
| $port = 5000; | |
| $max_clients = 10; | |
| if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) { | |
| $errorcode = socket_last_error(); | |
| $errormsg = socket_strerror($errorcode); | |
| die("Couldn't create socket: [$errorcode] $errormsg \n"); | |
| } | |
| echo "Socket created \n"; | |
| // Bind the source address | |
| if (!socket_bind($sock, $address, 5000)) { | |
| $errorcode = socket_last_error(); | |
| $errormsg = socket_strerror($errorcode); | |
| die("Could not bind socket : [$errorcode] $errormsg \n"); | |
| } | |
| echo "Socket bind OK \n"; | |
| if (!socket_listen($sock, 10)) { | |
| $errorcode = socket_last_error(); | |
| $errormsg = socket_strerror($errorcode); | |
| die("Could not listen on socket : [$errorcode] $errormsg \n"); | |
| } | |
| echo "Socket listen OK \n"; | |
| echo "Waiting for incoming connections... \n"; | |
| //array of client sockets | |
| $client_socks = array(); | |
| //array of sockets to read | |
| $read = array(); | |
| //start loop to listen for incoming connections and process existing connections | |
| while (true) { | |
| //prepare array of readable client sockets | |
| $read = array(); | |
| //first socket is the master socket | |
| $read[0] = $sock; | |
| //now add the existing client sockets | |
| for ($i = 0; $i < $max_clients; $i++) { | |
| if ($client_socks[$i] != null) { | |
| $read[$i + 1] = $client_socks[$i]; | |
| } | |
| } | |
| //now call select - blocking call | |
| if (socket_select($read, $write, $except, null) === false) { | |
| $errorcode = socket_last_error(); | |
| $errormsg = socket_strerror($errorcode); | |
| die("Could not listen on socket : [$errorcode] $errormsg \n"); | |
| } | |
| //if ready contains the master socket, then a new connection has come in | |
| if (in_array($sock, $read)) { | |
| for ($i = 0; $i < $max_clients; $i++) { | |
| if ($client_socks[$i] == null) { | |
| $client_socks[$i] = socket_accept($sock); | |
| //display information about the client who is connected | |
| if (socket_getpeername($client_socks[$i], $address, $port)) { | |
| echo "Client $address : $port is now connected to us. \n"; | |
| } | |
| //Send Welcome message to client | |
| $message = "Welcome to php socket server version 1.0 \n"; | |
| socket_write($client_socks[$i], $message); | |
| break; | |
| } | |
| } | |
| } | |
| //check each client if they send any data | |
| for ($i = 0; $i < $max_clients; $i++) { | |
| if (in_array($client_socks[$i], $read)) { | |
| $input = socket_read($client_socks[$i], 1024); | |
| if ($input == null) { | |
| //zero length string meaning disconnected, remove and close the socket | |
| unset($client_socks[$i]); | |
| socket_close($client_socks[$i]); | |
| } | |
| $n = trim($input); | |
| echo "$n from $address \n"; | |
| for ($j = 0; $j < $max_clients; $j++) { | |
| if ($client_socks[$j] !== $client_socks[$i]) { | |
| socket_write($client_socks[$j], "$n \n"); | |
| } | |
| } | |
| //send response to client | |
| // socket_write($client_socks[$i], $output); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment