Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
3 / 3 / 5
Регистрация: 06.03.2014
Сообщений: 38

сокеты - сторона клиента

07.03.2014, 18:47. Показов 1445. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда создалось соединение между "клиентом" и "сервером" (с помощью сокетов), клиента получает от сервера сообщение "привет", выводит на экран брузера "привет":

PHP
1
2
3
4
5
6
7
8
9
10
11
        echo 'Server said: ';
        $out = socket_read($socket, 1024);
        echo $out."\n";  // выводит на экран привет
 
        // тут надо поставить скрипт на ожидание: дождаться пока пользователь введёт сообщение (с клавиатуры) и занести содержимое сообщение в переменную $msg
 
        
        $msg = "Сообщение клиента";
        echo "Say to server ($msg) ...";
        socket_write($socket, $msg, strlen($msg));
        echo "OK\n";
Мне нужно после третий строчки поставить скрипт на ожидание: дождаться пока пользователь введёт сообщение (с клавиатуры) и занести содержимое сообщение в переменную $msg. Как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2014, 18:47
Ответы с готовыми решениями:

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

Создание клиента через сокеты
Ниже приведен код при компиляции которого получил несколько сообщений об ошибках. #include <WinSock2.h> #include...

Отключение клиента от сервера. сокеты
Здравствуйте, пишу простой чат с использованием сокетов. Чат работает вполне адекватно, но есть проблема, после отключения клиента от...

10
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
08.03.2014, 09:52
Цитата Сообщение от Derick Посмотреть сообщение
Мне нужно после третий строчки поставить скрипт на ожидание: дождаться пока пользователь введёт сообщение (с клавиатуры) и занести содержимое сообщение в переменную $msg. Как это сделать?
Это дело где вообще происходит, в консоли?
Потоки ввода/вывода.
1
3 / 3 / 5
Регистрация: 06.03.2014
Сообщений: 38
08.03.2014, 16:48  [ТС]
Нет, не консоль - браузер. Сейчас приведу весь код скрипта Клиента (он из интернета):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php  
  
   header('Content-Type: text/plain;');
    error_reporting(E_ALL ^ E_WARNING);
    set_time_limit(0);
    ob_implicit_flush();
    
    echo "-= Client =-\n\n";
 
    $address = 'localhost';
    $port    = 10001;
 
    try {
    
        echo 'Create socket ... ';
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket < 0) {
            throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
 
        echo 'Connect socket ... ';
        $result = socket_connect($socket, $address, $port);
        if ($result === false) {
            throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
 
        echo 'Server said: '; // сервер говорит "Привет, Клиент."
        $out = socket_read($socket, 1024);
        echo $out."\n";
        
        $msg = "Hello, Server!"; // вот тут я хотел бы присвоить значение из формы, но не понимаю как сюда втиснуть этот процесс.
        echo "Say to server ($msg) ...";
        socket_write($socket, $msg, strlen($msg));
        echo "OK\n";
        
        echo 'Server said: ';
        $out = socket_read($socket, 1024);
        echo $out."\n";
        
        $msg = 'shutdown';
        echo "Say to server ($msg) ... ";
        socket_write($socket, $msg, strlen($msg));
        echo "OK\n";
        
    } catch (Exception $e) {
        echo "\nError: ".$e->getMessage();
    }
    
    if (isset($socket)) {
    
        echo 'Close socket ... ';
        socket_close($socket);
        echo "OK\n";
        
    }
    
?>

Скрипт "Сервер почти такой же". Запускается сначала скрипт "сервер" (образуется сокет, ожидание "клиента"), потом запускается скрипт "клиент" (тот что выложил). Идёт соединение с уже образованным сокетом сервера, обмен информации и сокеты на обоих концах закрываются.

А я хочу понять как можно втиснуться в этот процесс, например с помощью формы послать серверу своё сообщение, после того как сервер сказал клиенту "Привет, Клиент." Или так нельзя делать в сокетах?


Я просто хочу понять как делают чаты на сокетах.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
08.03.2014, 16:51
Цитата Сообщение от Derick Посмотреть сообщение
Или так нельзя делать в сокетах?
В сокетах можно, в php нельзя. Через браузер никак не получится посылать данные в php-скрипт прямо во время его работы...
1
3 / 3 / 5
Регистрация: 06.03.2014
Сообщений: 38
08.03.2014, 16:55  [ТС]
А я думал что делают чаты в PHP на такой системе.

Ну а как же игрушки. Например, мне надо что бы три игрока поочереди отгадывали число от одного до ста. Там же нужно соединение реального времени , правильно? И нужен ввод данных. Я просто в этой сфере полной ноль. Не посоветуете куда копать?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
08.03.2014, 16:59
Цитата Сообщение от Derick Посмотреть сообщение
Не посоветуете куда копать?
в сотрону веб сокетов javascript
1
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
08.03.2014, 17:00
Цитата Сообщение от Derick Посмотреть сообщение
Я просто хочу понять как делают чаты на сокетах.
нормальные чаты делают на компилируемых языках (с++ к примеру).

Цитата Сообщение от Derick Посмотреть сообщение
А я думал что делают чаты в PHP на такой системе.
Ну а как же игрушки. Например, мне надо что бы три игрока поочереди отгадывали число от одного до ста. Там же нужно соединение реального времени , правильно? И нужен ввод данных. Я просто в этой сфере полной ноль. Не посоветуете куда копать?
можно сделать чтобы сообщения хранились в текстовом файле или базе данных. и у клиента страница обновлялась бы каждую секунду и обновляла список сообщений. чтобы не обновлять всю страницу можно использовать ajax.

Да и в интернете вроде как полно статей как создать чат на php\ajax.

На счет "режима реального времени" не уверен, может как нибудь и можно, но... можно конечно написать сервер и на php и запускать его фоново, но это уже изврат какой то...
0
3 / 3 / 5
Регистрация: 06.03.2014
Сообщений: 38
08.03.2014, 17:04  [ТС]
Вы про node.js?

Добавлено через 3 минуты
Ну про обновлять каждые N секунд я уже думал: это кажется старая система, правильно? Да и аяком у меня проблем нет, только аяксом тут не решишь же этот вопрос.
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
08.03.2014, 17:06
Лучший ответ Сообщение было отмечено Derick как решение

Решение

http://professorweb.ru/my/html... l7/7_3.php
1
3 / 3 / 5
Регистрация: 06.03.2014
Сообщений: 38
08.03.2014, 17:16  [ТС]
Ребят, спасибо за помощь. Я бы так и пытался как баран переть с одним php.
0
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 14
11.03.2014, 22:30
у меня похожая задача. нужно синхронизировать две страницы браузера. по изменении на одной, обновлять вторую. как лучше решить задачу? если использовать бесконечный цикл ожидания на второй странице, то не загружается интерфейс. спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2014, 22:30
Помогаю со студенческими работами здесь

Сокеты и подключение клиента к серверу
Не могу подключится в консольном чате к другому компьютеру по ип, сам к себе могу и все работает, вот код сервера:#define...

Сокеты: Отловить отключение клиента
Собственно,сделал я сервер.Приём пакетов для каждого подключения в отдельном потоке.Проблема в том,что если юзер неожиданно отключился...

Передача сообщения от клиента к серверу, сокеты
Хочу передать сообщение от клиента к серверу и вывести это сообщение. Как это сделать? сервер #ifndef UNICODE #define UNICODE ...

Передача файла от Клиента к Серверу Сокеты
Нашел исходник передачи файлов от сервера к клиенту, все нормально работает, пытаюсь реализовать обратную передачу от клиента к серверу. ...

Асинхронные сокеты: организация взаимодействия сервера и клиента
Добрый день. У меня стоит следующая задача: клиент шлет запрос серверу и сервер начинает слать данные потоком клиенту, пока клиент не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru