Php 不能';t连接插座:[111]连接被拒绝

Php 不能';t连接插座:[111]连接被拒绝,php,sockets,gps,Php,Sockets,Gps,我正在尝试使用PHP开发GPS跟踪系统。我在车辆上安装了GPS跟踪设备,我可以通过SMS设置IP地址和端口。因此,该设备将数据发送到给定的服务器端口。我的理想是,使用PHP套接字,我将侦听套接字并将其存储到MySQL数据库中。以后我想干什么就干什么 现在的问题是我无法从设备接收消息。请先查看我的代码 服务器端套接字代码:(SERVER.php) 您好,如果您提到的ip是正确的,那么我只能看到打开的ftp http端口和sip端口 使用 nmap 检查打开的端口。 或者您可以使用netcat进行

我正在尝试使用PHP开发GPS跟踪系统。我在车辆上安装了GPS跟踪设备,我可以通过SMS设置IP地址和端口。因此,该设备将数据发送到给定的服务器端口。我的理想是,使用PHP套接字,我将侦听套接字并将其存储到MySQL数据库中。以后我想干什么就干什么

现在的问题是我无法从设备接收消息。请先查看我的代码

服务器端套接字代码:(SERVER.php)


您好,如果您提到的ip是正确的,那么我只能看到打开的ftp http端口和sip端口

使用

nmap
检查打开的端口。 或者您可以使用netcat进行测试

nc <ip-addr> <port>
      OR
nc -v -w 1 <ip-addr> -z <port>
nc
或
nc-v-w 1-z
这些工具帮助您进行调试。 和评论中提到的一样,这也可能是防火墙问题。要验证它,您可以将侦听端口临时更改为80。就我所见,它是开着的。 如果这也失败了。我们可以查看php代码以了解更多详细信息。请提供您对上述命令的观察。
使用专用ip(例如192.168.1.x)和使用公共ip(例如166.62.10.183)的外部网络检查它们是否形成相同的网络。看看你是否看到不同的行为

这听起来像是防火墙的问题,如前所述-如果您想连接到特定端口,请确保服务器打开该端口以接受入站连接


另外,为什么您要从头开始编写自己的套接字服务器?有-您可能需要查看和。

如果您的主机提供商无法打开端口,您可以使用代理配置。在nginx中更容易实现,但也可以在apache中实现。如果您使用的是AWS(或任何云提供商),则需要通过打开的端口配置打开的端口或代理

我同意@Devidas,使用nmap查看哪些端口打开

您的代码也没有指示事件循环,这将需要进行后台监控。您应该以这种风格编写它(一个简单的代码只需要大约100行代码),或者使用现有的许多代码之一,例如php pear或上面提到的代码。这当然适用于客户端和服务器


客户机和服务器在同一时刻通过WAN以您编写的方式进行连接,这将是一个充满希望的远景

感谢您的回答,从过去两天的工作中,我了解到服务器没有正确设置,无法从外部设备接收信息。防火墙正在阻止传入连接。没有共享主机/CAN主机服务提供商准备打开端口。他们告知,出于安全原因,他们不会为出站连接打开端口。最后,在打开入站和出站连接端口后,相同的代码在专用服务器上运行良好

您是否有防火墙阻止连接?为什么要将协议指定为
0
?您不想要
SOL_TCP
?我检查了一下,我可以远程登录到您服务器上的端口22,但无法登录到5544,这意味着它无法进行外部访问。根据您的云提供商是否启用了防火墙或您的计算机是否启用了防火墙,您需要为外部访问启用端口5544谢谢@Don'tPanic。我尝试了所有可用的协议。但它仍然不起作用。我已经联系了主机提供商,他们已经打开了端口。还是没有luck@TarunLalwani你是说入境港吗。我的主机提供商只启用了传出端口。@Kalaivanan,传出在这里无关紧要。那么传入端口将起作用。您的客户端将在传入端口上连接,因此它需要打开。当服务器运行时,来自外部机器的telnet应该可以工作,否则外部无法连接
<?php

//Creating a Socket
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "1:: ---- Socket Created </br><br>";


//Connecting to Server
if(!socket_connect($sock, "166.62.10.183", 5544)){
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Couldn't connect socket: [$errorcode] $errormsg </br>");
}
echo "2:: ---- Connection Established </br></br>";

//Send message to Server
$message = "Message from Web\r\n";
if(!socket_send($sock, $message, strlen($message), 0 )){
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Couldn't not send data: [$errorcode] $errormsg </br>");
}
echo "3:: ---- Message sent </br></br>";
// ?>
nmap <ip-addr>
nc <ip-addr> <port>
      OR
nc -v -w 1 <ip-addr> -z <port>