Member 13072690 Ответов: 1

PHP сокет не работает


У меня есть домен (ad-box.deslab.vn). Я хочу, чтобы PHP-сокет общался с клиентами. Однако после того, как я запускаю программу, она имеет ошибку:

****Предупреждение: socket_bind(): не удается выполнить привязку адреса [22]: недопустимый аргумент в /home/vietchip/public_html/deslab.vn/ad-box/index.php на линии 27 socket_bind() ошибка: причина: недопустимый аргумент socket_bind() ошибка: причина: недопустимый аргумент****

Ссылка: ad-box.deslab.vn/index.php

Код:

<? php

предназначенных(состав e_all);

/ * Позвольте скрипту зависнуть в ожидании соединений. */
set_time_limit(0);

/* Включите неявную промывку вывода, чтобы мы видели, что получаем
* по мере поступления. */
ob_implicit_flush();

$адрес = "181.224.157.142";
$порт = 10000;

// Создать Сокет
$носка = socket_create(равен af_inet, являются sock_stream, SOL_TCP);
if ($sock = = = false) {
echo " socket_create () failed: reason:". socket_strerror(socket_last_error ()). " \n";
}
if (! socket_set_option ($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
Эхо socket_strerror(socket_last_error($носка));
выход;
}

// Привязать сокет к порту
socket_bind($sock, $address, $port);
if (socket_bind($sock, $address, $port) = = = false) {
echo " socket_bind () failed: reason:". socket_strerror(socket_last_error ($sock)). " \n";
}

// Начните прослушивать соединение
socket_listen ($sock, 5); / / максимум-5 соединений
if (socket_listen($sock, 5) = = = false) {
echo " socket_listen() failed: reason:". socket_strerror(socket_last_error ($sock)). " \n";
}

// Обработка соединения от клиента
делать {
$msgsock = socket_accept ($sock); / / msgsock - это клиент, подключенный к веб-серверу
if ($msgsock = = = false) {
echo " socket_accept() failed: reason:". socket_strerror(socket_last_error ($sock)). " \n";
перерыв;
}

$request = " PHP сказал : Вы отправлены ". socket_read($msgsock, 2048, PHP_BINARY_READ);
socket_write($msgsock, $request, strlen($request));
socket_close ($msgsock); / / закрыть соединение клиента
} while (true);
socket_close ($sock); / / закрыть сокет сервера
?>

Пожалуйста, помогите мне исправить эту ошибку. Большое спасибо.

Что я уже пробовал:

Я перепробовал много методов около 1 месяца, но они не работают

1 Ответов

Рейтинг:
0

Jochen Arndt

Вы звоните socket_bind дважды:

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

Первый вызов выполняется успешно, а второй-неудачно, потому что вы не можете привязаться к IP-адресу и Порту, которые уже используются. Удалите первый вызов. То же самое для socket_listen ниже.


Member 13072690

Спасибо за ваш ответ. Эта ошибка Верна, однако после того, как я исправил ее, это ошибка:
Тайм-Аут Шлюза
Шлюз не получил своевременного ответа от вышестоящего сервера или приложения.

Код Java клиента:

импорт java. io. BufferedReader;
импорт java. io. BufferedWriter;
импорт Java.Ио.Исключение IOException;
импорт Java.Ио.InputStreamReader;
импорт Java.Ио.Звено outputstreamwriter;
импорт java. net. Socket;
импорт java.net.UnknownHostException;

общественного класса WebClient {
public static void main (String[] args) вызывает исключение IOException {

Строка host ="ad-box.deslab.vn";


Сокет s = null;
Командой bufferedreader БР = нуль;
BufferedWriter bw = null;
пробовать {
s = новый сокет (хост, 10000);
br = new BufferedReader(new InputStreamReader (s. getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s. getOutputStream()));
} catch (UnknownHostException e) {
Системы.ошибаться.код println("не знаю насчет хоста: имя хоста\Н");
} catch (IOException e) {
Системы.ошибаться.код println("не могу получить ввода/вывода для подключения: имя хоста\Н");
}
// Отправить сообщение на сервер
Строковое сообщение = " FETEL HCMUS";
/ Сообщение / строка = "показать / НТТР/1.1\р\н\р\н";
// Системы.из.код println(сообщение);
bw. write(сообщение);
БВ.флеш();
// Получить ответ от сервера
Строковый ответ = "";
while ((response = br. readLine ())! = null) {
Системы.из.код println(ответ);
}
БВ.рядом();
БР.рядом();
С. рядом();
}
}

Пожалуйста, помогите мне больше

Jochen Arndt

Где происходит эта ошибка? На клиента?

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

Member 13072690

Хорошо, я задам новый вопрос