2013-10-03 32 views
2

我正在学习和尝试了解在PHP中的套接字,但我有一个while循环的问题。Php套接字,而

这是我的基本代码:

客户端

<?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本)或送我到网络上一个很好的教程的基本方法是什么?

+0

你只听同一台机器? – Raptor

+0

我不明白。这两个PHP都在服务器端,因为它是PHP。没有客户端PHP –

+0

Shivan - >是的,我只听学习相同的mache – user2840866

回答

0

我认为你有点在错误的道路上。

你写了两个小小的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数据库。