对,
我正在尝试用 PHP 编写一个小脚本,它将向 Minecraft 发送游戏内聊天包。
//Deliberately low timeout
$mc = fsockopen("localhost", 25565, $errno, $err, 3);
现在,如果连接成功,那么我会发送 2 个“数据包”。
A single byte其中包含整数 3,告诉 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 Server,并在同一台计算机上使用 XAMPP 运行 PHP 5.x。
有什么想法为什么连接会“被软件关闭”吗?为什么它仅在发送字符/字符串期间而不是在发送字节/短期间关闭?
<小时/> ** 是的,我已使用System.out.println
来验证 Minecraft 收到的数据。
最佳答案
10053 是WSAECONNABORTED 的winsock 错误代码.
可以在 http://www.chilkatsoft.com/p/p_299.asp 找到该错误情况的“可理解”解释。
关于java - 将字符写入 Java 套接字时 fsockopen 10053 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6923815/