0

右、

ゲーム内のチャットパッケージをMinecraftに送信するPHPで簡単なスクリプトを作成しようとしています。

//Deliberately low timeout
$mc = fsockopen("localhost", 25565, $errno, $err, 3);

これで接続に成功したら、2つの「パケット」を送信します。

整数3を含む1バイトで、着信ネットワークトラフィックをPacket3Chat「パケット」として処理する必要があることをMinecraftに通知します。

fwrite( $mc, strrev( pack( "C", 3 )  ) );

これはA-OK**で機能するようです。

必要な2番目の「パケット」は、符号付きショートとしての文字列の長さです。

$my_string = "Hello World!";
//119 character limit on Minecraft chat messages
$processed_string = substr($my_string, 0, 119);
fwrite($mc, strrev( pack( "s", strlen( $processed_string ) ) ) );

そして、それもA-OK**で機能するようです。

そして今やるべきことは、charsとして実際の文字列を送信することだけです。

を使用して文字列を分割し、str_split両方を使用して各文字を独自に送信してみました。

//Signed char
fwrite($mc, strrev( pack( "c", $character ) ) );

//Unsigned char
fwrite($mc, strrev( pack( "C", $character ) ) );

また、文字列全体を分割せずにこれらのメソッドで送信しようとしましたが、受信した文字を正常に印刷できずreadChar()System.out.println空の行を印刷するだけです)、fwriteエラー10053が発生します。文字の送信中のある時点-つまり、EOFExceptionによってスローされreadChar()ます。

変更したMinecraftサーバーをWindows7で実行しており、同じマシンでXAMPPを使用してPHP5.xを実行しています。

接続が「ソフトウェアによって閉じられる」理由はありますか?そして、なぜそれは文字/文字列の送信中にのみ閉じられ、バイト/ショートの送信中には閉じられないのですか?


**はい私はSystem.out.printlnMinecraftによって受信されたデータを検証するために使用しました。

4

2 に答える 2

4

10053 はWSAECONNABORTEDの winsock エラー コードです。
そのエラー状態の「わかりやすい」説明は、http://www.chilkatsoft.com/p/p_299.asp にあります。

于 2011-08-03T08:57:06.330 に答える
0

プラグインHTTPConsoleを試して、

次のような関数を使用してコマンドを実行します。

function exec_shell_command($command) {
$command = urlencode($command);
$url = "http://127.0.0.1:25560/console?command=$command";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$out = curl_exec($ch);
curl_close($ch);
return $out;
}
$retval = exec_shell_command("say this is a server message");

「チャット メッセージを送信する」と言ったときに、これが意図したとおりに機能しているかどうかはわかりません。これにより、コンソール メッセージがサーバーに投稿されます。

于 2011-08-16T10:53:06.333 に答える