2012-01-28 4 views
4

Что я пытаюсь сделать, это добавить поддержку плагина Votifier на моем сайте.Использование fsockopen для подключения к серверу - отказалось

Я переправил правильные порты для сервера 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 отключает соединение, возможно, потому что шифрование не является правильным?

+0

Если вы используете общий хостинг, исходящий порт 8142 может быть заблокирован. Например, общий хостинг GoDaddy позволяет использовать только fsockopen на 443 и 80. – Drakes

ответ

0

Ошибка, которую вы получаете, это connection refused, это означает, что либо IP-адрес, либо порт неверен. Они должны быть подтверждены для правильности. Поскольку вы заявили, что переадресовали порты, еще одна причина того, что код не работает, может заключаться в том, что вы запускаете скрипт и сервер minecraft за одним и тем же маршрутизатором, а ваш маршрутизатор не поддерживает NAT Loopback, это не показатель того, что есть что-то не так с вашим сценарием, но у вашего маршрутизатора отсутствует функция.

В вашем коде больше ошибок при вычислении остатка, вы НЕ должны делить сумму на 2, вместо этого вычисляете ее как $leftover = (256 - strlen($str));, чтобы предотвратить, чтобы выходной блок был меньше 256 и прослушивал некоторые реализации протокола Votifer, плагин Votifer по умолчанию не проверяет все ограничения протокола на его входе.

Смежные вопросы