套接字服务器保持循环,仅在循环结束时回显

时间:2016-12-25 09:24:05

标签: php sockets

我启动了server.php和client.php。之后,在client.php中,我向服务器发送一些单词或任何内容。服务器保持循环而不显示输入(客户端发送的消息)。一旦我输入" q"在client.php中(这是为了结束server.php中的while循环)客户端之前发送的所有消息都显示在server.php中。问题是我希望服务器在客户端发送到服务器后立即显示客户端消息或实时显示客户端消息。无论如何我能做到吗?真的很感激,如果有任何解决方案。感谢。

这是server.php

<?php
 error_reporting(0);
 set_time_limit(0);
 ob_implicit_flush();
 $host = "127.0.0.1";
 $port = 25004;
 echo "Waiting for connections... \n";
 $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

 $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");

 $result = socket_listen($socket,0) or die("Could not set up socket listener\n");

 while(1){
  $spawn[++$i] = socket_accept($socket) or die("Could not accept incoming connection\n");
  echo "\n";
  $input = socket_read($spawn[$i], 1024) or die("Could not read input\n");
  if($input== 'q'){break;}
  $input = trim($input);
  echo "Client Message : ".$input;
  $output = "aloha";
  socket_write($spawn[$i], $output, strlen ($output)) or die("Could not write output\n");
echo "\n";
 }
 socket_close($spawn);
 socket_close($socket);
?>

这是我的client.php

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>CLient</title>
<link rel="stylesheet" href="../bootstrap-3.3.7/docs/dist/css/bootstrap.min.css">
<script src="../bootstrap-3.3.7/docs/assets/js/vendor/jquery.min.js"></script>
<script src="../bootstrap-3.3.7/docs/dist/js/bootstrap.min.js"></script>
</head>

<body>
<form method="post" action="client.php">
<p><h4><label>Type Your Message Here:<input name = "message" size = "25" maxlength = "30" required></label></h4></p>
<input type="submit" name="sendmsg" class="btn btn-primary" value="send message"/>
</form>

<?php
 $user="abc";
 if(empty($_POST)){ }

 elseif(isset($_POST['sendmsg'])) {
  $message =$_POST["message"];
  $host    = "127.0.0.1";
  $port    = 25004;

  echo "Message To server :".$message;

  $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

  $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");  

  socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");

  $result = socket_read ($socket, 1024) or die("Could not read server response\n");
  echo "Reply From Server  :".$result;

  socket_close($socket);
 }  
 ?>

 </body>
 </html>

0 个答案:

没有答案