socket_connect(): 无法连接 [10061] - 目标机器主动拒绝它

Posted

技术标签:

【中文标题】socket_connect(): 无法连接 [10061] - 目标机器主动拒绝它【英文标题】:socket_connect(): unable to connect [10061] - target machine actively refused it 【发布时间】:2013-07-15 21:00:35 【问题描述】:

我正在尝试使用 php socket_connect() 函数连接用 C 编写的目标,但出现以下错误:

警告: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>";
    

我在 Windows 7 中使用带有 PHP 5.4 的 xampp 服务器,并且我禁用了防火墙设置。我仍然收到同样的拒绝错误。

请帮我解决这个问题。 [过去 3 天我一直在与这个问题作斗争]

提前致谢。

【问题讨论】:

你的 $address 是什么? $address机器中的$service_port是否被防火墙允许? 是的。我的 $service 端口被允许使用 $address。如果我使用 Visual Studio 2010 - Windows 应用程序进行检查,我的基于 C 的目标正在与客户端通信,而不是与 PHP 套接字连接。 @Kumar 你试过重新安装 WAMP 吗? 检查这个。 link 【参考方案1】:

如果您在同一台机器上运行客户端和服务器代码,那么您必须像下面的示例一样将它们混合起来:

<?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);
?>

【讨论】:

【参考方案2】:

希望以下链接对您有所帮助。检查解决方案。 http://www.codeproject.com/Questions/426966/System-Net-Sockets-SocketExcep

【讨论】:

感谢您的回复,但此链接对我不起作用。(我正在尝试建立 TCP 连接) 如果您从办公室访问该链接,请检查您的代理设置。发布的答案上的链接对我有用。【参考方案3】:

我意识到这是一篇旧帖子,但是,我最近在使用 IIS 7 下运行的 php 时遇到了这个问题,经过多次谷歌搜索后无法找到解决方案。

许多站点建议通过更改 php.ini 文件(然后停止并重新启动 IIS)来启用套接字。

我发现我必须在 IIS 7 管理器中启用套接字才能使套接字工作。

我发现手动更改 php.ini 文件并没有启用 php 中的套接字(以及 IIS 7)。我下面的示例代码显示 phpinfo();如果启用了套接字,则会有一个名为 Sockets 的特定部分,它会显示自己已启用。

IIS Manager 7 --> 向下滚动到 PHP Manager 并选择 --> 向下滚动到 PHP Extensions 并选择启用/禁用扩展的选项 --> 如果尚未启用则启用套接字 --> 重新启动 IIS。

我正在运行一个桌面套接字服务器(我编写的 - 使用端口 9999)并且能够使用我编写的桌面客户端连接到我的服务器(用于测试,在同一台 Windows 7 PC 上运行)但无法使用连接php 在同一台 PC 上运行。

我测试连接的 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);

?>

我希望这对某人有所帮助。

【讨论】:

以上是关于socket_connect(): 无法连接 [10061] - 目标机器主动拒绝它的主要内容,如果未能解决你的问题,请参考以下文章

php系统函数socket_connect信息乱码

websocket 函数

PHP 从 Windows 机器上的套接字读取

PHP如何接收动态数据保存并实时显示到网页上?

网络无法连接network错误

MYSQL为啥用IP地址无法连接