I'm new to socket connections, I want to send some commands to the socket server, but I can just send the first message to no other.
Customer:
$fp = stream_socket_client("tcp://127.0.0.1:1000", $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $cmd_1 = "hello"; fwrite($fp, $cmd_1); while (!feof($fp)) { print_r(fgets($fp, 1024)); } $cmd_2 = "second message"; fwrite($fp, $cmd_2); while (!feof($fp)) { print_r(fgets($fp, 1024)); } fclose($fp); }
How can I send several messages, for example, the first $cmd_1 , and depending on the result, I need to send $cmd_2 ?
Server
error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); $address = '127.0.0.1'; $port = 1000; 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; } $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); socket_close($sock);
source share