Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
16 / 16 / 4
Регистрация: 19.04.2013
Сообщений: 1,194

Создание сокетсервера

03.02.2016, 13:05. Показов 850. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте.

Вот нащёл в сети простенький примерчик сокет сервера:

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
set_time_limit(0);
    
    $host = "148.251.95.199";
    $port = 4096;
    
    if(extension_loaded('sockets')) echo "WebSockets OK";
    else echo "WebSockets UNAVAILABLE";
 
    $socket = socket_create(AF_INET, SOCK_STREAM, 0);
 
    $result = socket_bind($socket, $host, $port);
 
    $result = socket_listen($socket, 3);
 
    $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
 
    $input = socket_read($spawn, 1024) or die("Could not read input\n");
    $input = trim($input);
    echo "Client Message : ".$input."
";
    $output = strrev($input) ."
";
    socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
 
    socket_close($spawn);
    socket_close($socket);

Но немогу стото найти как на php при подключении сохраняять адрес с которого подключились
чтоб когда нужно отсылать им данные.

Добавлено через 49 минут
так пойдём с начала.

у меня есть домен на хосте. открываю там подомен. кладу на поддомен файлик socketServer.php c кодом из первого поста.

теперь пытаюсь связаться с ним через свой js Клиент вот его код

JavaScript
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
window.onload = function()
{
    var label = document.getElementById("status");
    var message = document.getElementById("message");
    var btnSend = document.getElementById("send");
    var btnStop = document.getElementById("stop");
    
    var socket = new WebSocket("ws://auction.weblaboratory.info/socketServer.php");
    
    socket.onopen = function(event){
        label.innerHTML = "Соединились c сервером " + socket.url;
    };
    socket.onclose = function(event){
        label.innerHTML = "Соединение закрыто";
        
        var code = event.code;
        var reason = event.reason;
        var wasClean = event.wasClean;
        
        alert("" + wasClean + ", "  + reason + ", " + code);
        
        if(wasClean)
        {
            label.innerHTML = "Соединение закрыто корректно!";
        }
        else
        {
            label.innertHTML = "Соединение закрыто с ошибкой! Причина" + reason + " Код " + code;
        }
    };
    
    socket.onerror = function(event){
        console.log("error");
    };
    
    
    socket.onmessage = function(event){
        if(typeof event.data === "string")
        {
            label.innerHTML = event.data;
        }
    };
    
    btnSend.onclick = function(event) {
        if(socket.readyState === WebSocket.OPEN)
        {
            socket.send(message.value);
        }
    };
    
    btnStop.onclick = function() {
        if(socket.readyState === WebSocket.OPEN)
        {
            socket.close();
        }
    };
};
но соединение моментально закрывается с кодом ошибки 1006

что у меня неправельно со стороны сервера? Что поравить или вызывать надо както по другому!??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2016, 13:05
Ответы с готовыми решениями:

Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД)
В задание для курсовой работы по БД входят вот такие пункты: 1.2 Создание функции БД. 1.3 Создание процедуры БД 1.4 Создание...

Хочу освоить и применить на практике создание локальной сети, создание домена
Доброго времени суток. Господа, на днях начал осваиваю win server 2003. Хочу освоить и применить на практике создание локальной сети,...

Создание БД учет заявок на доступ к информационным ресурсам: создание отчетов
Доброго времени суток. Это всего вторая моя попытка что-то наваять в MS Access, сильно не пинайте. Задача: сделать БД по учету...

3
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
03.02.2016, 21:09
Цитата Сообщение от UProger Посмотреть сообщение
Но немогу стото найти как на php при подключении сохраняять адрес с которого подключились
чтоб когда нужно отсылать им данные.
socket_getpeername()
Цитата Сообщение от UProger Посмотреть сообщение
что у меня неправельно со стороны сервера?
Все правильно.

Вот немного подправил скрипт. Запускаю сервер. Подключаюсь через telnet 127.0.0.1 4096. Ввожу Hello. В ответ получаю elloH.

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
<?php
set_time_limit(0);
 
$host = "127.0.0.1";
$port = 4096;
 
$proto = "tcp";
$protoId = getprotobyname($proto);
 
if ($protoId === FALSE)
    die(sprintf("Error getprotobyname(%s)\n", $proto));
 
$socket = socket_create(AF_INET, SOCK_STREAM, $protoId);
if ($socket === FALSE)
    die("Error socket_create()\n");
 
$result = socket_bind($socket, $host, $port);
if($result === FALSE)
    die("Error socket_bind()\n");
 
$result = socket_listen($socket, 3);
if ($result === FALSE)
    die("Error socket_listen()\n");
 
$spawn = socket_accept($socket);
if ($spawn === FALSE)
    die("Error socket_accept()\n");
 
$address = "";
 
 
if (socket_getpeername($spawn , $address))
    printf("IP: %s", $address);
else
    printf("Error socket_getpeername(): %s\n",socket_strerror(socket_last_error($socket)));
 
$input = "";
while (strlen($input) < 5)
{
    $buff = socket_read($spawn, 1024);
    if ($buff === FALSE)
        die("Error socket_read()\n");
    $input .= $buff;
}
 
printf("Client Message : %s\n", $input);
 
$output = strrev($input);
 
socket_write($spawn, $output, strlen($output));
if ($buff === FALSE)
        die("Error socket_write()\n");
 
socket_close($spawn);
socket_close($socket);
Вывод на сервере:
Code
1
2
IP: 127.0.0.1
Client Message : Hello
Вывод на клиенте:
Code
1
2
3
4
5
     olleH
 
Подключение к узлу утеряно.
 
C:\Users\pav1uxa>
Так что на стороне PHP все работает исправно.

А что там с JavaScript и WebSocket не знаю, это уже не в этом разделе наверное.
0
16 / 16 / 4
Регистрация: 19.04.2013
Сообщений: 1,194
03.02.2016, 23:30  [ТС]
А если клиент будет сидеть не на локалке а тоже на хосте?(когда сайт подниму)
0
3 / 3 / 0
Регистрация: 22.11.2011
Сообщений: 121
05.03.2016, 02:52
а в чем вопрос?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2016, 02:52
Помогаю со студенческими работами здесь

Создание кода из строк или создание произвольного количества объектов
Привет сообществу. Возник такой вопрос: Мне в мидлете необходимо создать некоторое количество StringItem, заранее неизвестное, то бишь...

Создание локальной БД. Создание класса для работы с БД. Ошибка подключения к БД
Доброго времени суток! Нужно создать БД и создать класс для работы с ним - методы: добавление, удаления, просмотр самой базы,...

Создание формулы и последующее заполнение таблицы, избежание повторов информации, создание интерфейса
Не люблю просить о помощи, но, к сожалению, сроки поджимают и не позволяют подробно ознакомиться с профессиональной литературой по MS...

Создание базы данных на лету, создание и заполнение таблиц в базе DB (Paradox? или..).
Здравствуйте Профи! --- Видел я &quot;простенькую&quot; (exe-шник небольшого размера, запускается сразу, без предварительной установки)...

Создание источника данных, создание серверных страниц и выбор WEB-сервера и его установка
на практике попросили сделать задание. 1)Создание источника данных 2)Создание серверных страниц 3)Выбор WEB-сервера и его установка ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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