PHP: socket_connect работает, но не socket_bind - PullRequest
2 голосов
/ 20 января 2012

Я пытаюсь подключиться через сокет TCP к стороннему продукту. Я могу сделать это (и успешно отправить сообщение) со следующим кодом:

  if (isset($port) and ($socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) and (socket_connect($socket, $address , $port)))
  {
    $text="Connection successful on IP $address, port $port";
    $data = "<msg id=1>text</msg>" . $newline; 
    socket_send($socket, $data, strlen($data), MSG_DONTROUTE);
    $text .= socket_strerror(socket_last_error());
    socket_close($socket);
  }

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

Обычно разрешено только одно использование каждого адреса сокета (протокола / сетевого адреса / порта).

код (фрагмент из класса TCP, я проверил, что IP-адрес, порт и т. Д. Одинаковы в обоих фрагментах):

            $this->Socket = socket_create(AF_INET, SOCK_STREAM, 0);
    $result = socket_bind($this->Socket, $this->Host, $this->Port);
    $result = socket_listen($this->Socket, 3) or die("Could not set up socket listener\n");
    $spawn = socket_accept($this->Socket) or die("Could not accept incoming connection\n");

Как получается, что я могу подключиться с помощью socket_connect, но не socket_bind? Это правильно, что мне нужно использовать socket_bind, если я хочу слушать на этом сокете?

Я использую PHP на Windows XP Apache (Zend). Я должен также упомянуть, что единственное другое приложение, работающее при попытке выполнить этот код, - это сторонняя программа, к которой я пытаюсь подключиться.

Спасибо за понимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...