将Chars写入Java套接字时出现fsockopen 10053错误

时间:2011-08-03 08:44:36

标签: java php connection fsockopen minecraft

右,

我正在尝试在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收到的数据。

2 个答案:

答案 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");

当您说“发送聊天消息”时,我不确定这是否正在执行您想要的操作。这会将控制台消息发布到服务器。