Я пытаюсь подключиться через сокет 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). Я должен также упомянуть, что единственное другое приложение, работающее при попытке выполнить этот код, - это сторонняя программа, к которой я пытаюсь подключиться.
Спасибо за понимание.