右、
ゲーム内のチャットパッケージを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.println
Minecraftによって受信されたデータを検証するために使用しました。