1

ジャバコード:

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 コードの戻り値: 致命的なエラー: 7 行目の C:\xampp\htdocs\index.php で最大実行時間が 60 秒を超えました

4

3 に答える 3

1

if(in.readLine() == "xFF")=> PHPスクリプトで改行文字を送信しないため、これは永久にブロックされます。したがって、Javaアプリから何も送信することはなく、freadは何も読み取ることはありません。fwrite($con, "xFF\n");トリックを行う必要があります。

于 2012-11-24T12:47:09.917 に答える
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
    }
?>
于 2012-11-24T12:48:43.410 に答える
0

PHPで「TCPサーバー」を実装しようとしているのは正しいと思います。これはあなたが考えるこの種のものではありません:

通常、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 スクリプトは、いくつかのデータを高速に配信して終了する必要があります。

于 2012-11-24T12:43:24.780 に答える