php - 使用 fsockopen 连接到服务器 - 连接被拒绝

标签 php bukkit fsockopen

我想做的是在我的网站上添加对 Votifier 插件的支持。

我已经为 Minecraft 服务器转发了正确的端口,测试并确认它们是开放的。也用过Minestatus确认 Votifier 插件是否正常工作。

但是,当我尝试使用我发现的用于连接服务器的 PHP 脚本时,我得到的只是连接被拒绝。

<?php

error_reporting(E_ALL);

// Details of the vote.
$str = "VOTE\n" .
       "TopHCSMP\n" .
       "SlickTheNick666\n" .
       "50.98.149.40\n" .
       time()."\n";

// Fill in empty space to make the encrypted block 256 bytes.
$leftover = (256 - strlen($str)) / 2;

while ($leftover > 0) {
    $str .= "\x0";
    $leftover--;
}

// The public key, this is an example.
$key =             "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkFywgrx2fPXL/CPS1Gi5/a7zoTfWV9fqrhsJMzPqqC0CnLBBkg8VUiwnBVsMvhJrUT1mLvyHx5H9dobTVlE+aoxcsDRa1Yc9OAUKHspxrPswRW6/Yn85YAghOSBZfgPoXD3Q0Ng5jkJUoBUHOBtFHDUeAHi5av36iJ8dTQTSaOyAXKGdB88TOzre5cpnj5oDi/JSJ0bCJx7cgcBAO1TvOVuFMTXhygDyEVh6 o2nn8+qdDlEPXf+m+dxdkH3zWkkWjY4OittIpaHj2n8ihgPqwMPZFH1CXkoTjoSh4Fo7KtUAaAa4gt5w/thauozG25G    1s2XSigNgCDDvg4S8awmtewIDAQAB";
$key = wordwrap($key, 65, "\n", true);
$key = <<<EOF
-----BEGIN PUBLIC KEY-----
$key
-----END PUBLIC KEY-----
EOF;

// Encrypt the string.
openssl_public_encrypt($str, $encrypted, $key);

// Establish a connection to Votifier.
$socket = fsockopen("50.98.149.40", "8192", $errno, $errstr, 2);

if (!$socket) {
    die("Failed to connect to Votifier.");
}

// Send the contents of the encrypted block to Votifier.
fwrite($socket, $encrypted);
?>

Votifier 似乎正在断开连接,可能是因为加密不正确?

最佳答案

您收到的错误是连接被拒绝,这意味着 ip 地址或端口不正确。这些都需要确认其正确性。既然你说你转发了端口,代码不起作用的另一个原因可能是你在同一个路由器后面运行脚本和 minecraft 服务器,而你的路由器不支持 NAT Loopback ,这并不表示您的脚本有问题,而是您的路由器缺少功能。

你的代码有更多的错误,在计算剩余的时候,你不应该将数量除以 2,而是计算为 $leftover = (256 - strlen($str)); 到为了防止输出 block 小于 256 和窃听 Votifer 协议(protocol)的某些实现,默认的 Votifer 插件不会检查其输入的所有协议(protocol)限制。

关于php - 使用 fsockopen 连接到服务器 - 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048492/

相关文章:

php - 如何在php中将数据发送到另一个文件

php - Safari 无法正确显示 php 提供的 mp3 的持续时间

java - 如何从列表中删除所有重复项

java - 在 Java 中从 MongoDB 数组中删除对象

php - 使用单个 fsockopen 获取多个页面

PHP fsockopen()/fread() 返回困惑的数据

PHP:没有 php.ini 文件

codeigniter - 如何为 CodeIgniter 设置 date.timezone 以使用 php 5.3

java - 有没有办法创建一个特定于玩家的倒计时,当玩家离开时停止在Java中?

PHP - 登录到 https 网站并在该 session 中获取 html 文件