2013-07-17 3 views
1

Я пытаюсь соединить цели, написанные на C с использованием функции PHP socket_connect(), но я получаю следующее сообщение об ошибке:socket_connect(): не удается подключиться [10061] - целевая машина активно отказалась

Предупреждения : socket_connect(): невозможно подключиться [10061]: соединение не может быть выполнено, потому что целевая машина активно отказалась от него.

Это код, что я бегу:

$service_port = 1234; 
    $address = "xx.xxx.xx.xxx"; 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);  
    if ($socket === false) { 
     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
    } else { 
     echo "OK.\n<br>"; 
    }  
    echo "Attempting to connect to '$address' on port '$service_port'...\n";   

    $result = socket_connect($socket, $address, $service_port); 

    if ($result === false) { 
     echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
    } else { 
     echo "OK.\n<br>"; 
    } 

Я использую сервер XAMPP с PHP 5.4 в Windows 7, и я отключил параметры брандмауэра. Тем не менее, я получаю ту же ошибку.

Пожалуйста, помогите мне решить эту проблему. [Я борюсь с этой проблемой за последние 3 дня]

Заранее спасибо.

+0

Каков ваш адрес в $? Разрешен ли $ service_port брандмауэром в $ address machine? – srain

+0

да. My $ service port разрешен к $ address. Если я проверяю приложение Visual Studio 2010 - Windows, моя цель на основе C связана с клиентом, но не с подключением к сокету PHP. – KumarA

+0

@Kumar Вы пытались переустановить WAMP? –

ответ

0

надеюсь, что ссылка ниже. проверить решение. http://www.codeproject.com/Questions/426966/System-Net-Sockets-SocketExcep

+0

Спасибо за ответ, но эта ссылка не работает для меня. (I я пытаюсь установить TCP-соединение) – KumarA

+0

Проверьте настройки прокси-сервера, если вы получаете доступ к ссылке из своего офиса. Ссылка на ответ, опубликованный, работает для меня. – p1nkrock

0

если вы работаете коды клиента и сервера на том же Мачин, то вы должны смешивать их как в этом примере ниже:

<?php 

//client 

$host = "localhost"; 
$port = 80; 
$message = "Hello Server"; 
echo "Message To server :".$message; 
// create socket 
$socket1 = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 
// connect to server 
$result1 = socket_connect($socket1, $host, $port) or die("Could not connect to server\n"); 


//server 


// don't timeout! 
set_time_limit(100); 
// create socket 
$socket2 = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 
// bind socket to port 
$result2 = socket_bind($socket2, $host, $port) or die("Could not bind to socket\n"); 
// start listening for connections 
$result2 = socket_listen($socket2, 3) or die("Could not set up socket listener\n"); 

// accept incoming connections 
// spawn another socket to handle communication 
$spawn = socket_accept($socket2) or die("Could not accept incoming connection\n"); 



// send string to server 
socket_write($socket1, $message, strlen($message)) or die("Could not send data to server\n"); 


// read client input 
$input = socket_read($spawn, 1024) or die("Could not read input\n"); 
// clean up input string 
$input = trim($input); 
echo "Client Message : ".$input; 
// reverse client input and send back 
$output = strrev($input) . "\n"; 
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); 


$result1 = socket_read ($socket1, 1024) or die("Could not read server response\n"); 
echo "Reply From Server :".$result1; 

socket_close($spawn); 
socket_close($socket2); 
socket_close($socket1); 
?> 
0

Я понимаю, что это старый пост, однако, я в последнее время возникла эта проблема с использованием php, работающего под IIS 7, и не удалось найти решение после многих поисковых запросов.

Многие сайты предложили включить сокеты, изменив файл php.ini (затем остановив и перезапустив IIS).

Я нашел, что мне нужно было включить сокеты в диспетчере IIS 7, чтобы заставить сокеты работать.

Я обнаружил, что просто изменение файла php.ini вручную не разрешало сокеты в php (вместе с IIS 7). В моем примере кода отображается phpinfo(); если сокеты включены, будет определен раздел с именем Sockets, и он будет отображаться сам.

Менеджер IIS 7 -> Прокрутите вниз до PHP Manager и выберите -> прокрутите вниз до PHP-расширений и выберите вариант включения/выключения расширения -> включить сокеты, если он еще не включен, -> перезапустить IIS.

Я запускал сервер сокетов для настольных компьютеров (который я написал - используя порт 9999) и смог подключиться к моему серверу с помощью настольного клиента, который я написал (для тестирования, работы на том же ПК с Windows 7), но не смог подключиться используя php, работающий на одном ПК.

Мой PHP код, чтобы проверить соединение выглядит следующим образом:

<?php 
echo "hello<br><br>"; 
echo phpinfo(); 
$fp = stream_socket_client("tcp://127.0.0.1:9999", $errno, $errstr, 30); 
if (!$fp) { 
    echo "error<br><br>"; 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    fwrite($fp, "GET/HTTP/1.0\r\nHost: www.google.com\r\nAccept: */*\r\n\r\n"); //just returns an acknowledgement 
    while (!feof($fp)) { 
     echo fgets($fp, 1024); 
    } 
    fclose($fp); 
} 
?> 

Я надеюсь, что это поможет кому-то.

Ken

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

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