我想開發使用PHP的GPS跟蹤系統。我在車輛上安裝了GPS跟蹤設備,並且可以通過SMS設置IP地址和端口。所以該設備將數據發送到給定的服務器端口。我的理想是,使用PHP Socket我會監聽套接字並將其存儲到MySQL數據庫中。後來我可以做任何我想要的東西無法連接套接字:[111]連接拒絕
現在的問題是我無法接收來自設備的消息。請看看我的代碼第一
服務器端套接字代碼:(server.php)
<?php
$_SOCKET = "166.62.10.183";
$_PORT = 5544;
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 "Socket created \n";
// Bind the source address
if(!socket_bind($sock, $_SOCKET , $_PORT))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
if(!socket_listen ($sock , 10))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode] $errormsg \n");
}
echo "Socket listen OK \n";
echo "Listening on \n SOCKET: ".$_SOCKET."\n PORT: ".$_PORT."\n";
echo "Waiting for incoming connections... \n";
//start loop to listen for incoming connections
while (true)
{
//Accept incoming connection - This is a blocking call
$client = socket_accept($sock);
//display information about the client who is connected
if(socket_getpeername($client , $address , $port))
{
echo "Client $address : $port is now connected to us. \n";
}
//read data from the incoming socket
$input = socket_read($client, 1024000);
$response = "OK .. $input";
echo $response;
}
?>
客戶端測試代碼:(client.php)
<?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>";
// ?>
當我運行客戶端.php代碼來自同一臺服務器,我可以在server.php中看到消息(我通過SSH運行「php server.php」)。當我從任何其他服務器上運行的代碼,我看到以下錯誤消息
1 :: ----插槽創建
無法連接插座:[111]拒絕連接
我想是因爲這個原因,我無法接收來自GPS設備的消息。指導我解決這個問題。
您是否有可能阻塞連接的防火牆?你爲什麼將協議指定爲'0'?你不想'SOL_TCP'? –
我檢查並且能夠telnet到服務器上的端口22,但不是在5544上,這意味着它不能用於外部訪問。根據您的雲提供商是否具有防火牆或您的計算機啓用了防火牆,您需要啓用端口5544以進行外部訪問 –
Thanks @ Don'tPanic。我嘗試了所有可用的協議。但它仍然沒有工作。我已聯繫託管服務提供商,他們已經開通了該端口。仍然沒有運氣 – Kalaivanan