2014-01-28 26 views
0

下面的代碼發出一個UDP包,當我從我的Linux服務器上運行它時,我的網絡客戶端的地址是udp://192.168.1.107:2159。但是,當我使用代碼中顯示的地址Linux服務器地址從客戶端調用同一網頁時,將發出無UDP數據包。我用Chrome瀏覽器試用了一臺PC客戶端,並用Safari瀏覽器試用了一臺Mac客戶端。另外,phpinfo()顯示allow_url_fopen是「On」。另外,我也嘗試了沒有fflush()函數的代碼。爲什麼UDP數據包不能從客戶端網頁發送到服務器使用PHP fsockopen?

客戶端網頁和PHP套接字是否有限制?我沒有看到這個網絡搜索。順便說一下,我在同一臺客戶端機器上編寫了一個Java應用程序,並將UDP數據包發送到地址和端口沒有問題。

phpinfo(); 

$errno = 0; 
$errstr = ""; 
$fsocket = fsockopen("udp://192.168.1.103:2195", $errno, $errstr); 
if(!$fsocket) { 
    echo "$errstr($errno)<br/>\n"; 
} else { 
    $out = "Oh ya baby!\r\n"; 
    fwrite($fsocket, $out); 
    fflush($fsocket); 
    fclose($fsocket); 
} 

回答

1

該端口是第二參數fsockopen()。它需要通過與域名隔離的通過。像這樣:

$fsocket = fsockopen("udp://192.168.1.103", 2195, $errno, $errstr); 
+0

謝謝,但我也嘗試過這個版本的呼叫,我沒有收到數據包。我不知道它是否是用於其他系統配置的PHP設置? –

+0

這裏是我嘗試過的文本... [code] $ fsocket = fsockopen(「udp://192.168.1.108」,2195,$ errno,$ errstr,30); [/ code] –

+0

不,它應該工作。請先在同一主機的第二個終端上安裝一個udp測試服務器,以確保沒有防火牆禁止訪問:'nc luv 2195'。然後在另一個終端上運行你的php腳本,使用'udp:// 127.0.0.1'和​​端口'2195'。它在我的電腦上工作,我沒有修改'php.ini'。檢查此:http://radarearth.com/content/using-netcat-udp-port-troubleshooting – hek2mgl

0

問題......你不能總是相信Wireshark!我太信任Wireshark了。我創建了一個Java應用程序來接收來自基於Web的PHP fsockopen數據包傳輸。低看,Java抓住了數據包,Wireshark錯過了數據包 - 每次都是這樣。 Wireshark的失敗案例是Mac(客戶端PHP網絡調用),Linux(Wireshark會話和PHP Web服務器)。

我不知道Wireshark是否將數據包標記爲其他數據,或者Wireshark所關心的PHP生成的數據包中有什麼隱晦的東西?奇怪的是,當我從一個Java應用程序傳輸相同的數據包時,Wireshark會捕獲它!我不知道所有原因。但我得到PHP fsockopen工作,所以我的工作已經完成!它適用於Linux和Mac OS 10之間的所有客戶端和服務器組合,非常棒!

相關問題