2012-11-24 55 views
1

Java代碼:TCP服務器的Java與PHP

import java.io.*; 
import java.net.*; 

class Server { 
    public static void main(String args[]) { 
     try { 
     ServerSocket srvr = new ServerSocket(51); 
     Socket skt = srvr.accept(); 
     System.out.print("Server has connected!\n"); 
     PrintWriter out = 
       new PrintWriter(skt.getOutputStream(), true); 
     BufferedReader in = 
       new BufferedReader(new InputStreamReader(skt.getInputStream())); 
     if(in.readLine() == "xFF"){ 
      out.print("OK"); 
     } 
     in.close(); 
     out.close(); 
     skt.close(); 
     srvr.close(); 
     } 
     catch(Exception e) { 
     System.out.print("Whoops! It didn't work!\n"); 
     } 
    } 
} 

PHP代碼:

<?php 
    $con = fsockopen("127.0.0.1", 51, $errno, $errstr, 10); 
    fwrite($con, "xFF"); 
    if(fread($con, 256) == "OK"){ 
     // Its Works 
    } 
?> 

PHP代碼返回:致命錯誤:用C超過60秒的最長執行時間:\ XAMPP \ htdocs中\ index.php on line 7

回答

1

if(in.readLine() == "xFF") =>由於您不會在您的PHP腳本中發送換行符,因此這會永久封鎖。因此,你永遠不會從你的Java應用程序發送任何東西,fread永遠不會讀取任何東西。 fwrite($con, "xFF\n");應該做的伎倆。

0

如果我猜想你正在試圖用PHP實現「TCP-Server」。這是不可能的這種你認爲的:

通常一個PHP腳本將在60秒後終止。但是你可以重寫這個行爲是一個.htaccess文件,php.ini或者一個php函數。

的.htaccess

<IfModule mod_php5.c> 
php_value max_execution_time 500 
</IfModule> 

的php.ini

查找與max_execution_time線和增加值。

PHP

set_time_limit(0); 

不過我建議不要在PHP中實現的服務器。 PHP腳本應該簡單地提供一些數據並退出。

0

你的腳本是超過60秒最大執行時間增加至300秒或更喜歡這個

<?php 
    ini_set('max_execution_time', 300); //max execution time set to 300 seconds 
    $con = fsockopen("127.0.0.1", 51, $errno, $errstr, 10); 
    fwrite($con, "xFF"); 
    if(fread($con, 256) == "OK"){ 
     // Its Works 
    } 
?>