对,
我正在尝试用 PHP 编写一个小脚本,它将游戏中的聊天包发送到 Minecraft。
//Deliberately low timeout
$mc = fsockopen("localhost", 25565, $errno, $err, 3);
现在,如果连接成功,那么我发送 2 个“数据包”。
一个带有整数 3 的字节,告诉 Minecraft 它应该将传入的网络流量作为 Packet3Chat “数据包”处理:
fwrite( $mc, strrev( pack( "C", 3 ) ) );
这似乎可以正常工作**。
所需的第二个“数据包”是将字符串的长度作为有符号的 short。
$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 ) ) ) );
这似乎也可以正常工作**。
现在剩下要做的就是发送实际的字符串,作为 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 at在发送字符期间的某个时间点 - 即 anEOFException
被readChar()
.
我在 Windows 7 上运行修改后的 Minecraft Server,并在同一台机器上使用 XAMPP 运行 PHP 5.x。
任何想法为什么连接会“被软件关闭”?为什么它只会在发送字符/字符串期间而不是在发送字节/短字节期间关闭?
** 是的,我曾经用来
System.out.println
验证 Minecraft 收到的数据。