2013-10-03 71 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數據庫。