php Socket Socket_bind () не может связать адрес [10013] - PullRequest
0 голосов
/ 04 марта 2019

Моя ситуация:

  • У меня есть программа, которая отправляет на порт (4448) большое количество данных с некоторых машин.
  • Я могу получить эти данные из соединения telnet.

шаги telnet:

  • запустить как cmd как ADMIN
  • написать telnet и отправить
  • написать «open localhost 4448» иотправить
  • написать «GET xx, yy»
  • после этого я просто читаю информацию на экране в режиме реального времени

xx и yy - это числа, идентифицирующие машину

Теперь давайте перейдем на сторону php. У меня есть свой index.php, но когда я выполняю привязку к сокету, он возвращает мне ошибку (сообщаемую под кодом) и код, это происходит из: http://php.net/manual/en/sockets.examples.php иЭто первый пример, я прочитал и попробовал это решение также https://www.codeproject.com/Tips/418814/Socket-Programming-in-PHP, которые используют 2 файла PHP, в обоих случаях я получаю ту же ошибку ...

<?php
error_reporting(E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
 * as it comes in. */
ob_implicit_flush();

$address = 'localhost';
$port = 4448;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "GET xx,yy";
    socket_write($msgsock, $msg, strlen($msg));

    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);

socket_close($sock);
?>

, и это ошибка, яget:

Предупреждение: socket_bind (): невозможно связать адрес [10013]: была предпринята попытка получить доступ к сокету способом, запрещающимden по разрешениям доступа

Я уже искал права администратора и думаю, что все в порядке.

Дополнительная информация: я работаю с PHP 7, мой веб-сервер Apache вПакет Xampp.

1 Ответ

0 голосов
/ 04 марта 2019

Возможно, другая программа уже использует этот порт.Попробуйте использовать другой порт.Если это работает, вы можете попытаться найти процесс с использованием порта и завершить его.Этот инструмент от sysinternals может помочь: https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview

Если использование другого порта также дает сбой, возможно, у вас есть брандмауэр, который не разрешает привязку.Попробуйте временно отключить брандмауэр.

...