java - 将字符写入 Java 套接字时 fsockopen 10053 错误

标签 java php connection fsockopen minecraft

对,

我正在尝试用 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 - 即 EOFExceptionreadChar() 抛出。

我在 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/

相关文章:

c# - MQQueue 中的 PutReplyMessage 和 PutReportMessage 的用途是什么?

java - 在 JPanel 中添加 JPanel - 嵌套的 JPanel 不会显示

php - 如何在 Laravel 5.2 中检查 url?

connection - 如果应用程序崩溃,Java JRE 会关闭连接吗?

Java 2d 游戏 - 增量时间和碰撞问题

java - 如何调用具有泛型类型的 LinkedList

php - 如何在 Symfony 2 中设置表单字段名称?

javascript - HTML 字段不会通过 AJAX POST 到 PHP

java - C#/Java 套接字连接丢失?

ios - View Controller URL 请求和连接正确完成后崩溃