Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 27.08.2011
Сообщений: 6

Не работают веб сокеты

06.07.2014, 21:17. Показов 1576. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сразу к делу.
Пытаюсь освоить веб сокеты и написал простенький скрипт сервера и клиента.Клиент работает т.к. я проверил его в соединении с ws://echo.websocket.org
так что я думаю проблема в сервере, ибо я не могу с ним соединиться - это первое и второе, функция
PHP
1
$accept = socket_accept($socket);
должна ждать пока подключится пользователь и только потом выполнять какие то действия, но она выполняется бесперебойна и в итоге конструкция
PHP
1
2
3
4
5
6
7
8
9
10
11
if($accept === false)
    {        
    echo "Error...".socket_strerror(socket_last_error())."<br />\r\n";
        echo $accept;
    usleep(300);
    } 
    else
    {
    echo "OK <br />\r\n";
    echo "Client \"".$accept."\" has connected<br />\r\n";                
    }
постоянно выдает мне сообщения
Waiting--Error...Получен недопустимый аргумент.
Собственно вот код сервера
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
62
63
error_reporting(E_ALL); //Выводим все ошибки и предупреждения
set_time_limit(0);      //Время выполнения скрипта не ограничено
ob_implicit_flush();    //Включаем вывод без буферизации 
 
$host = "websocket.ru";
$port = 1234;
 
echo "-=SERVER v1.0=-<hr><br />";
 
echo "Socket create----";
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))<0)
{
    echo "Error...".socket_strerror(socket_last_error())."<br />";
    exit();
}
else
{
    echo "OK<br />";
}
 
echo "Socket bind------";
//привязываем его к указанным ip и порту
if(($bind = socket_bind($socket, $host, $port)) < 0)
{
    echo "Error...".socket_strerror(socket_last_error())."<br />\r\n";
    exit();
}
else
{
    echo "OK <br />\r\n";
}
 
socket_setopt($socket, SOL_SOCKET, SO_REUSEADDR, 1);//разрешаем использовать один порт для нескольких соединений
 
echo "Socket listening--";
if(($listen = socket_listen($socket, 5)) < 0)
{
    echo "Error...".socket_strerror(socket_last_error())."<br />\r\n";
    exit();
}
else
{
    echo "OK <br />\r\n<hr>";
}
 
while(true)
{ 
    echo "Waiting--";
    $accept = socket_accept($socket);
    if($accept === false)
    {        
    echo "Error...".socket_strerror(socket_last_error())."<br />\r\n";
        echo $accept;
    usleep(300);
    } 
    else
    {
    echo "OK <br />\r\n";
    echo "Client \"".$accept."\" has connected<br />\r\n";                
    }
}
echo "<hr>";
echo "Server closed";
А вот код клиента
HTML5
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<html>
    <head>
        <title>Client</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style type="text/css">
html,body {
    font:normal 0.9em arial,helvetica;
}
#log {
    width:400px; 
    height:350px; 
    border:1px solid #7F9DB9; 
    overflow:auto;
}
#msg {
    width:400px;
}
</style>
<script type="text/javascript">
var socket;
 
function init() {
    var host = "ws://websocket.ru:1234"; // SET THIS TO YOUR SERVER
    try {
        socket = new WebSocket(host);
        log('WebSocket - status '+socket.readyState);
        socket.onopen    = function(msg) { 
                               log("Welcome - status "+this.readyState); 
                           };
        socket.onmessage = function(msg) { 
                               log("Received: "+msg.data); 
                           };
        socket.onclose   = function(msg) { 
                               log("Disconnected - status "+this.readyState); 
                           };
    }
    catch(ex){ 
        log(ex); 
    }
    $("msg").focus();
}
 
function send(){
    var txt,msg;
    txt = $("msg");
    msg = txt.value;
    if(!msg) { 
        alert("Message can not be empty"); 
        return; 
    }
    txt.value="";
    txt.focus();
    try { 
        socket.send(msg); 
        log('Sent: '+msg); 
    } catch(ex) { 
        log(ex); 
    }
}
function quit(){
    if (socket != null) {
        log("Goodbye!");
        socket.close();
        socket=null;
    }
}
 
function reconnect() {
    quit();
    init();
}
 
// Utilities
function $(id){ return document.getElementById(id); }
function log(msg){ $("log").innerHTML+="<br>"+msg; }
function onkey(event){ if(event.keyCode==13){ send(); } }
</script>
</head>
<body onload="init()">
<h3>WebSocket v1.0</h3>
<div id="log"></div>
<input id="msg" type="text" onkeypress="onkey(event)"/>
<button onclick="send()">Send</button>
<button onclick="quit()">Quit</button>
<button onclick="reconnect()">Reconnect</button>
</body>
</html>
Очень прошу мне помочь, я уже 3 дня не могу разобраться с этим, гугл перерыл весь, ни чего не работает, либо я что то не так делаю, или(это мои крайние опасения) я криво установил апач или рнр.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2014, 21:17
Ответы с готовыми решениями:

Php сокеты и unix-сокеты
Здравствуйте, есть программа, написанная на С под Linux. При её работе в памяти хранятся несколько массивов, которые необходимо обработать...

Не работают сокеты UDP
Пытаюсь сделать связь на UDP сокетах, не получается. Не отсылается сигнал readyRead(), помогите разобраться в чем проблема. Код .h ...

Как работают сокеты?
Добрый день. Может кто разъяснить как работают сокеты ? Как реализовать общение между сервером и клиентами? Сокет держать открытым или...

1
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
08.07.2014, 01:36
Вероятно у вас сокет в неблокирующем режиме (т.е. не ждет получения данных, а возвращает false).

Добавьте socket_set_blocking($socket, 1) в свой код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.07.2014, 01:36
Помогаю со студенческими работами здесь

Веб сокеты
Я делаю консольное приложение на c#, клиент на javascript. Соединение проходит хорошо, клиент говорит что соединился и рукопожатие прошло...

Не работают сокеты на локалхосте. Дело не в коде!
Доброго времени товарищи! Вобщем дело такое, не понятное. У меня на lamp значит написал код с сокетами отладил, всё ништяк работает,...

Как работают профи веб-разработки
Запись с вебкамеры ASP.NET программиста за пять минут перед сдачей работы. http://www.youtube.com/watch?v=gxbGyGpPY3U

Веб-браузер. Не работают карты гугл
Не открываются карты гугл через созданный на С# браузер. Пишет: ваш браузер устарел, и не только в картах.. Как это можно исправить?

почему не работают куки на веб-сервере?
почему не работают куки на веб-сервере? На localhost этот код работает и все выводит: &lt;?php setcookie('userid', '1',...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru