サーバ(以下に示すJavaプログラムをホストするコンピュータ)が動作しているかどうかを判断するPHPスクリプトを作成しようとしました。そうであれば、PHP関数はtrueを返す必要がありますfalseを返します。ここでPHPとJavaでソケットを使用する
はサーバです:
package darestium.minecraft.server;
import java.io.BufferedReader;
import java.net.*;
import java.io.*;
public class Server {
private static ServerSocket socket;
private static Socket connection;
private static String command = new String();
private static String responseStr = new String();;
private static int port = 4343;
public static void main(String args[]) {
System.out.println("Signal Server is running.");
try {
socket = new ServerSocket(port);
while (true) {
connection = socket.accept();
InputStreamReader inputStream = new InputStreamReader(connection.getInputStream());
DataOutputStream response = new DataOutputStream(connection.getOutputStream());
BufferedReader input = new BufferedReader(inputStream);
command = input.readLine();
response.writeBytes(responseStr);
response.flush();
//response.close();
System.out.println("Running");
}
} catch (IOException e) {
System.out.println("Fail!: " + e.toString());
}
System.out.println("Closing...");
}
}
そして、ここでは、クライアントである:
<?
function isRunning() {
$address = 'darestium.dyndns-free.com';
$port = 4343;
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
$message = 'loolololol';
try {
socket_connect($socket, $address, $port);
$status = socket_sendto($socket, $message, strlen($message), MSG_EOF, $address, $port);
if ($status != false) {
return true;
}
return false;
} catch (Exception $e) {
return false;
}
}
?>
次は関数の結果をエコー表示PHPのページに表示されたエラーメッセージです以下のようなので:
include('server.php');
echo isRunning();
そして、エラーメッセージ:
Warning: socket_connect() [function.socket-connect]: unable to connect [0]: No connection could be made because the target machine actively refused it. in C:\Users\darestium\Documents\Portables\xampp\htdocs\darestium\minecraftserver.php on line 9
Notice: Use of undefined constant MSG_EOF - assumed 'MSG_EOF' in C:\Users\darestium\Documents\Portables\xampp\htdocs\darestium\minecraftserver.php on line 11
Warning: socket_sendto() expects parameter 4 to be long, string given in C:\Users\darestium\Documents\Portables\xampp\htdocs\darestium\minecraftserver.php on line 11
この問題を解決する方法を知りました。また、私はサーバーにメッセージを送ることができるようにしたい、どのように私はこれを行うことができますか?私はこれをベースにしています。Simple Java TCP Server and PHP Client Problems
注:私はソケットとサーバー/クライアントのコミュニケーションにおいて非常に新しいものです。
編集:
@VideanuAdrian OK、ちょうどポートは、ポート4343を転送していないし、それはもはや最初のエラーで現れますが、関数は常にfalseを返すようですが、最後の2つのエラーがまだ表示されます。
マシンにJava部分を実行するファイアウォールがありますか?またはjavaの部分がルータの後ろにホストされている場合は、ポート転送設定をしましたか? –
@ VideanuAdrian OK、ポートだけがポート4343を転送し、最初のエラーでは表示されなくなりましたが、関数は常にfalseを返しているように見え、最後の2つのエラーは引き続き表示されます。 – Darestium
ああ、また、サーバーアプリケーションがオフのときにエラー(最初のエラー)が表示され、その関数はまだfalseを返します。 – Darestium