簡體   English   中英

PHP套接字連接-Telnet拒絕連接

[英]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以在端口上接受,但是它沒有用,但是可能是我做錯了。

還有其他可以嘗試的想法嗎?

  • xCoder

您必須更改:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM