[英]PHP Socket Connection - Telnet refused to connect
我寫了一個小類來管理PHP中的套接字連接:
#/usr/bin/php
<?php
define('PORT', 5000);
define('IP', '127.0.0.1');
/**
* SocketManager
*/
class SocketManager {
private $sock = null;
public $errorcode = null;
public $errormsg = null;
public $client = null;
public function initSocket($onConnect) {
echo "Init Socket\n";
if (!($this->sock = socket_create(AF_INET, SOCK_STREAM, 0))) {
$this->errorcode = socket_last_error();
$thid->errormsg = socket_strerror($errorcode);
return;
}
echo "Created Socket\n";
if (!socket_bind($this->sock, IP , PORT)) {
$this->errorcode = socket_last_error();
$thid->errormsg = socket_strerror($errorcode);
return;
}
echo "Bind Socket\n";
if(!socket_listen($this->sock , 10)) {
$this->errorcode = socket_last_error();
$thid->errormsg = socket_strerror($errorcode);
return;
}
echo "Listening on " . PORT . "\n";
while (true) {
echo ".";
$this->client = socket_accept($this->sock);
if(socket_getpeername($client , $address , $port)) {
if (!is_null($onConnect)) {
call_user_func_array($onConnect,array($client,$address,$port));
}
}
}
}
function __construct($onConnect) {
$this->initSocket($onConnect);
}
}
function handleConnection($client,$address,$port) {
echo "User Connected: $address\n";
}
$socket = new SocketManager("handleConnection");
?>
啟動此操作將導致以下輸出:
#/usr/bin/php
Init Socket
Created Socket
Bind Socket
Listening on 5000
.
使用netstat進行檢查可以打印出以下內容:
netstat -nap | grep LISTEN
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 32301/php
而且nmap告訴我打開了端口5000:
nmap -p 5000本地主機
PORT STATE SERVICE
5000/tcp open upnp
但是仍然嘗試使用telnet連接:
telnet SERVER_IP 5000我得到:
Trying SERVER_IP...
telnet: connect to address SERVER_IP: Connection refused
telnet: Unable to connect to remote host
我也嘗試過更改iptables以在端口上接受,但是它沒有用,但是可能是我做錯了。
還有其他可以嘗試的想法嗎?
您必須更改:
define('IP', '127.0.0.1');
與:
define('IP', '0.0.0.0');
通過使用127.0.0.1,您將只能從服務器本身進行連接,因為它綁定到127.0.0.1,就像netstat
所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.