右,
我正在尝试在PHP中编写一个wee脚本,它将向Minecraft发送游戏聊天包。
//Deliberately low timeout
$mc = fsockopen("localhost", 25565, $errno, $err, 3);
现在,如果连接成功,那么我发送2个“数据包”。
带有整数3的A single byte告诉Minecraft它应该像Packet3Chat“数据包”那样处理传入的网络流量:
fwrite( $mc, strrev( pack( "C", 3 ) ) );
这似乎可以正常工作**。
所需的第二个“数据包”是字符串的长度为a signed 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 ) ) ) );
这似乎也可以正常工作**。
现在剩下要做的就是发送实际字符串as 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()
。
我正在Windows 7上运行修改后的Minecraft服务器,并且我在同一台机器上使用XAMPP运行PHP 5.x.
为什么连接会被“软件关闭”的任何想法?为什么它只会在发送字符/字符串期间关闭而不是在发送字节/短字期间关闭?
<小时/> **是的我使用
System.out.println
来验证Minecraft收到的数据。
答案 0 :(得分:4)
10053是WSAECONNABORTED的winsock错误代码 可以在http://www.chilkatsoft.com/p/p_299.asp
找到对该错误情况的“可理解的”解释答案 1 :(得分: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");
当您说“发送聊天消息”时,我不确定这是否正在执行您想要的操作。这会将控制台消息发布到服务器。