对,
我正在尝试用PHP编写一个wee脚本,该脚本会将游戏内聊天程序包发送到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并同时使用这两个字符单独发送每个字符:
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()。
readChar()
System.out.println
EOFException
我正在Windows 7上运行修改后的Minecraft服务器,并且在同一台计算机上使用XAMPP运行PHP5.x。
有什么想法为什么连接会被“软件关闭”?以及为什么它只在发送字符/字符串时而不在发送字节/短时关闭?
**是的,我曾经用来System.out.println验证Minecraft收到的数据。
10053是WSAECONNABORTED的winsock错误代码。 可以在http://www.chilkatsoft.com/p/p_299.asp找到对该错误情况的“可理解”的解释。