Intereting Posts
Yii2 GridView не может установить ширину столбца PHP – синтаксический анализатор BBCode – проанализируйте тег ссылки bbcode и не помечен ссылкой Summernote – Image url вместо Base64 PDO SQLite запрос с нулевым результатом Как использовать расширение Pthreads PHP в Ubuntu текст появляется в левом верхнем углу моего сайта wordpress Найти подстроки в строке, где подстрока, инкапсулированная определенным символом Проблема с PHP связана с файловыми системами с учетом регистра Как я должен обрабатывать таймауты сервера и ответы на код ошибки на http-сообщение в приложении Android? Gmail с 3-сторонним доступом OAuth – Zend_Mail_Protocol_Exception Задержка после загрузки больших файлов с загрузчиком JQuery BlueImp Как правильно создать функцию для форматирования на PHP в расширении Yii2 Highcharts Как перебирать массив элементов stdObject в PHP? Подзапрос с LIMIT в Доктрине Создайте папку, если она еще не существует.

невозможно связать адрес : ошибка php

невозможно связать адрес [0]: разрешено только одно использование каждого адреса сокета (протокол / сетевой адрес / порт) …. ошибка дается на моей странице php-сервера. Я пробовал разные номера портов, глядя из cmd, как писать netstat -an. Также я искал в google, но без решения. Я использую wamp-сервер и работаю локально. Благодарю .

<?php // don't timeout //echo phpinfo(); set_time_limit (0); // set some variables $host = "127.0.0.1"; $port = 1234; // create socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); // bind socket to port $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); // start listening for connections $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); echo "Waiting for connections...\n"; // accept incoming connections // spawn another socket to handle communication $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); echo "Received connection request\n"; // write a welcome message to the client $welcome = "Roll up, roll up, to the greatest show on earth!\n? "; socket_write($spawn, $welcome, strlen ($welcome)) or die("Could not send connect string\n"); // keep looping and looking for client input do { // read client input $input = socket_read($spawn, 1024, 1) or die("Could not read input\n"); if (trim($input) != "") { echo "Received input: $input\n"; // if client requests session end if (trim($input) == "END") { // close the child socket // break out of loop socket_close($spawn); break; } // otherwise... else { // reverse client input and send back $output = strrev($input) . "\n"; socket_write($spawn, $output . "? ", strlen (($output)+2)) or die("Could not write output\n"); echo "Sent output: " . trim($output) . "\n"; } } } while (true); // close primary socket socket_close($socket); echo "Socket terminated\n"; ?> 

Эмм … это работает на веб-странице? Если это так, каждое попадание на страницу приведет к тому, что скрипт попытается привязать к порту 1234, который не будет происходить ни для одного, ни для одного за раз. Все остальные умрут.

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

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

Это не имеет большого значения, но при открытии сокета укажите правильный протокол:

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 

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

 for ( $port = 1234; $port < 65536; $port++ ) { $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); if ( $result ) { print "bind succeeded, port=$port\n"; break; } else { print "Binding to port $port failed: "; print socket_strerror(socket_last_error($socket))."\n"; } } if ( $port == 65536 ) die("Unable to bind socket to address\n"); 

Если это решает вашу проблему, вы можете захотеть сделать

 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); 

перед привязкой, чтобы сообщить системе, что он должен разрешить повторное использование порта.