2011-05-19 94 views
1

我在寫一個簡單的php套接字代碼。
這裏是我的代碼php的套接字連接代碼

<?php 

    $address="127.0.0.1"; 
    $port=9875; 
    echo "I am here"; 

    if(false==($socket= socket_create(AF_INET,SOCK_STREAM, SOL_TCP))) 
    { 
     echo "could not create socket"; 
    } 
    socket_bind($socket, $address, $port) or die ("could not bind socket"); 
    socket_listen($socket); 
    if(($client=socket_accept($socket))) 
     echo "client is here"; 

    ?> 

,當我運行這個程序,我的瀏覽器只顯示等待本地主機。
我的代碼有問題嗎?
我使用的是xammp 1.7.4。
我想知道的另一件事情是,如果我想獲取HTTP或FTP請求,我是否只更改端口號?

+0

請提高英語水平,避免問候,並表達謝意,並避免過多的問號寫作。 – 2011-05-19 05:14:38

+0

嘗試在完成使用後關閉套接字? – 2011-05-19 05:22:24

回答

6

我驗證的代碼,並在我的系統測試,它工作正常。運行客戶端後顯示爲「客戶端在這裏」。

文件名:server.php

<?php 
    $address="127.0.0.1"; 
    $port=9875; 
    echo "I am here"; 
    set_time_limit (0); 
    if(false==($socket= socket_create(AF_INET,SOCK_STREAM, SOL_TCP))) 
    { 
     echo "could not create socket"; 
    } 
    socket_bind($socket, $address, $port) or die ("could not bind socket"); 
    socket_listen($socket); 
    if(($client=socket_accept($socket))) 
     echo "client is here"; 

    socket_close($socket); 
    ?> 

首先運行server.php文件。

文件:client.php

<?php 
$host="127.0.0.1" ; 
$port=9875; 
$timeout=30; 
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ; 
if (!is_resource($sk)) { 
    exit("connection fail: ".$errnum." ".$errstr) ; 
} else { 

    echo "Connected"; 
    } 
?> 

現在運行client.php

你的輸出應該是這樣的(我在我的系統中得到)

我hereclient是這裏

如果沒有,請確保您的防火牆不阻止請求者ST。如果有的話,請暫時禁用防病毒軟件。

+0

它的工作原理。謝謝。你能給我你的郵箱地址,以便我能保持接觸你是嗎?我是新來的PHP。所以我有一些問題。你能幫我嗎? – 2011-05-20 11:25:56

+0

很高興知道它的作品。你總是可以發佈您的查詢在stackoverflow或與我聯繫在Facebook上, – AjayR 2011-05-21 00:18:04

3

即等待預期的行爲。 您編寫的程序是一個套接字服務器,它已準備好偵聽與指定端口的連接,直到它等待。

您可以創建一個客戶端連接誰,這樣你會看到響應「客戶端是在這裏」。客戶端可以是任何編程語言,包括PHP。

下面是PHP中的示例代碼(我沒有驗證)。

$fp = stream_socket_client("127.0.0.1:9875", $errno, $errstr); 

if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    // Handle code here for reading/writing 
} 

您可以在PHP中查看this link的示例客戶端代碼。

編輯

$host = "127.0.0.1"; 
$port = 9875; 
$timeout = 30; 
$sk = fsockopen($host, $port, $errnum, $errstr, $timeout); 
if (!is_resource($sk)) { 
    exit("connection fail: " . $errnum . " " . $errstr); 
} else { 
    echo "Connected"; 
} 
+0

我也寫了一個客戶端文件。但它無法到達服務器。它顯示錯誤「無法連接到127.0.0.1:9875(無連接可以作出,因爲目標機器積極地拒絕它。」 – 2011-05-19 07:37:41

+1

您運行的另一個頁面作爲客戶端?確保你第一次啓動服務器,你能嘗試在我的答案 – AjayR 2011-05-19 10:58:56

+0

我正在另一個頁面作爲客戶端編輯的代碼還首次啓動服務器,並嘗試你的代碼。但還是同樣的錯誤。 – 2011-05-19 12:31:49