将Chars写入Java套接字时出现fsockopen 10053错误
对,
我正在尝试用PHP编写一个wee脚本,它将向Minecraft发送一个游戏聊天包。
//Deliberately low timeout $mc = fsockopen("localhost", 25565, $errno, $err, 3);
现在,如果连接成功,那么我发送2个“数据包”。
一个字节,其中包含整数3,告诉Minecraft它应该像Packet3Chat“数据包”一样处理传入的网络流量:
fwrite( $mc, strrev( pack( "C", 3 ) ) );
这看起来像A-OK **。
需要的第二个“数据包”是字符串的长度作为有符号的短 。
$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 ) ) ) );
而且这似乎也可以正常工作**。
而现在剩下要做的就是发送实际的字符串, 就像字符一样 。
我尝试使用str_split
拆分字符串并使用两者自己发送每个字符:
//Signed char fwrite($mc, strrev( pack( "c", $character ) ) );
和
//Unsigned char fwrite($mc, strrev( pack( "C", $character ) ) );
而且我也试过通过这些方法发送整个字符串而不将其拆分,但是我无法成功打印出readChar()
收到的字符( System.out.println
只打印一个空行),并且在发送字符期间的某个时刻我得到一个fwrite错误10053 – 即readChar()
抛出一个EOFException
。
我在Windows 7上运行修改后的Minecraft服务器,我在同一台机器上使用XAMPP运行PHP 5.x.
任何想法为什么连接将“由软件关闭”? 为什么它只在发送字符/字符串期间关闭而不是在发送字节/短字期间关闭?
**是的我使用了System.out.println
来validationMinecraft收到的数据。
10053是WSAECONNABORTED的winsock错误代码。
可以在http://www.chilkatsoft.com/p/p_299.asp找到该错误情况的“可理解的”解释
尝试插件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");
当您说“发送聊天消息”时,我不确定这是否正在执行您想要的操作,这会将控制台消息发布到服务器。