我试图使用PHP socket_connect()函数连接用C编写的目标,但我得到了以下错误:
警告:socket_connect():无法连接[10601]:由于目标计算机主动拒绝,因此无法建立连接。
这是我正在运行的代码:
$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>";
}
我在Windows7中使用带有PHP 5.4的xampp服务器,并且我已经禁用了防火墙设置。尽管如此,我还是收到了同样的拒绝错误。
请帮我解决这个问题。[我在过去的3天里一直在与这个问题作斗争]
提前谢谢。
如果你在同一台机器上运行客户端和服务器代码,那么你必须像下面的例子一样把它们混合起来:
<?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);
?>
希望下面的链接能有所帮助。签出解决方案。http://www.codeproject.com/Questions/426966/System-Net-Sockets-SocketExcep
我意识到这是一篇旧文章,然而,我最近在IIS 7下运行php时遇到了这个问题,在多次谷歌搜索后都无法找到解决方案。
许多网站建议通过更改php.ini文件来启用套接字(然后停止并重新启动IIS)。
我发现我必须在IIS 7管理器中启用套接字才能使套接字工作。
我发现简单地手动更改php.ini文件并不能在php中启用套接字(以及IIS 7)。下面的示例代码显示phpinfo();如果启用了套接字,则会有一个名为sockets的特定部分,它将显示为已启用。
IIS Manager 7-->向下滚动到PHP Manager并选择-->向下滚动到PHP Extensions并选择启用/禁用扩展的选项-->如果尚未启用,则启用套接字-->重新启动IIS。
我运行的是一个桌面套接字服务器(我使用9999端口编写),能够使用我编写的桌面客户端连接到我的服务器(用于测试,在同一台Windows7电脑上运行),但无法使用在同一电脑上运行的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