【问题标题】:Php socket and whilePHP套接字和while
【发布时间】:2013-10-03 02:25:08
【问题描述】:

我正在学习并尝试理解 php 中的套接字,但我在使用 while 循环时遇到了一点问题。

这是我的基本代码:

客户端

<?php
     set_time_limit(0);

     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

     $res = socket_connect($socket, '127.0.0.1', 2000);

     $input = "Client to Server Message";

     socket_write($socket, $input, strlen($input));
     $res = socket_read($socket, 1024);

     echo $res;

     socket_close($socket);
?>

还有服务器端

<?php
     set_time_limit(0);

     $address = "127.0.0.1";
     $port = 2000;

     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

     socket_bind($socket, $address, $port) or die("Can't bind the socket");

     socket_listen($socket);

     echo "Server waiting connexion...";

     $client = socket_accept($socket);

     $input = socket_read($client, 1024);

     echo "\nInput : ".$input;

     $output = 'Server to Client Message';

     socket_write($client, $output);

     socket_close($client);
     socket_close($socket);

     echo "\nServer closed";
 ?>

它可以工作,但是如果我想在服务器端添加一个while循环来处理来自客户端的多条消息,我的浏览器会执行一个无限循环,我无法从服务器获取消息。

我必须怎么做才能让这个工作?

有人可以向我解释使用套接字仅使用 PHP 进行类似聊天的基本方法(我可以使用 socket.io 和 NodeJs 进行此操作)或发送给我一个很好的教程网络?

【问题讨论】:

  • 你只听同一台机器?
  • 我不明白。两个 PHP 都在服务器端,因为它是 PHP。没有客户端PHP
  • Shivan -> 是的,我听同样的机器只是为了学习
  • Christian Mark -> 是的,没错!但我的意思是 html/php 端而不是客户端,而不是命令行。

标签: php sockets


【解决方案1】:

我觉得你有点走错路了。

您编写了两个小的 php 脚本,其中服务器端不仅是在网络服务器上运行的脚本,而且已经是服务器。虽然您的客户端就像一个浏览器(只是有点基本)。 直截了当地写了一个聊天应用程序和一个聊天服务器,但没有写一个网站。

这意味着您应该将这两个脚本作为控制台脚本运行。 在 Linux 上,您有“php”命令。在 Windows 上阅读此http://php.net/manual/de/install.windows.commandline.php

如果您只想简单聊天,请使用:

<!-- html stuff -->
<pre>
<?php
//chat.php

// Safe message on server using file
if(isset($_GET['msg'])){
    // be carefull it's not clever to let the world write
    // to your server even if it's a textfile
    $f = fopen("db.txt","a+");
    fputs($f, $_GET['msg']);
    fclose($f);
}

// print all messages
readfile("db.txt");

?>
</pre>
<form>
 <textarea name="msg"></textarea>
 <input type="submit"/>
</form>

要获得更多类似聊天的感觉,这意味着无需重新加载页面,您需要 Javascript 和 AJAX 请求。看这里http://www.w3schools.com/php/php_ajax_php.asp

问题是我自己发现和使用的所有聊天的好教程通常也使用 mysql 数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 2013-02-19
    • 2022-08-05
    • 2017-10-28
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多