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

Flash-crossdomain.xml и PHP сокет сервер

11.12.2013, 11:10. Показов 1559. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую друзья.
Подскажите пожалуйста, что надо написать на php-сокет-сервере, что бы он отдавал файл политики для flash-клиента. Flash устанавливает соединение используя XMLSocket.

Вот как выглядит код сокет-сервера:
Кликните здесь для просмотра всего текста

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
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
 
include "include.php";
 
if($_GET['s'] != md5(PASSWORD))
{
  exit("access denied");
}
 
set_time_limit(0);
     
     
 
 $s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)       or die(SockErr());
      socket_set_option($s, SOL_SOCKET, SO_REUSEADDR, 1) or die(SockErr());
      socket_bind($s, HOST_IP, HOST_PORT)                or die(SockErr());
      socket_listen($s)                                  or die(SockErr());
 
      
  $clients = array($s);
  $user    = array();
  $admin   = null;
  
 
$userCount = 0; 
 
WHILE(true)
{  
  
  usleep(USLEEP); 
  $read = $clients;
 
  
  IF(@socket_select($read, $write=NULL, $except=NULL, 0) < 1)
  {
    continue;//-->
  }
         
 
 
  IF(in_array($s, $read))
  {
    $clients[] = $newsock = socket_accept($s);
    
    socket_getpeername($newsock, $ip);
    socklog("new connect $ip");
 
//->
    @$user[$newsock] = array();
 
     $key = array_search($s, $read);
     unset($read[$key]);
       
  }
 
  
  FOREACH($read as $read_sock) 
  {
     while(1)
     {    
       $b = @socket_read($read_sock, 1, PHP_BINARY_READ);
  
        if (strlen($b) == 0)
        {
          break;
        }        
        if($b != chr(0x00)/*'*'*/)
        { 
          @$user[$read_sock]['data'] .= $b;
          continue;//-->
        }
        else
        {
          $data = @$user[$read_sock]['data'];
          //
          if ($data == "<policy-file-request/>") {
            $crossdomain = '<?xml version=\"1.0\"?>\r\n<cross-domain-policy>\r\n<allow-access-from domain=\"*\" to-ports=\"*\" />\r\n</cross-domain-policy>';
            socket_write($read_sock, $crossdomain, strlen($crossdomain));
          }
          //
          @$user[$read_sock]['data'] = null;
          break;
        }
 
  
     }
    
     if (strlen($b) == 0)
     {
       $key = array_search($read_sock, $clients);
       unset($clients[$key]);
       socklog("client disconnected");
              
        if(!empty($admin) && @$user[$read_sock]['name'])
        {
           $back = array();
           $back['command'] = 'user_disconnect';
           $back['name']    = @$user[$read_sock]['name'];          
           shipjson($admin, $back);
        }
      
        if($admin === $read_sock)
        {
          $admin = NULL;
        }  
 
       unset($user[$read_sock]);              
       continue;//-->
     }
                     
   ////////////////////////////////
   $data = json_decode($data, true);    
   ////////////////////////////////
 
     if($data['command'] == 'qt' and $data['secret_key'] )
     {
       break 2;
     }
     if ($data['command'] == 'start' && !$user[$read_sock]['name']) {
        $user[$read_sock]['name'] = $data['id'] ? $data['id'] : "".($userCount++);
        //
        $user[$read_sock] =  array(
        "command" => "init",
        "name"    => $user[$read_sock]['name']);
        shipjson($newsock, @$user[$newsock]);
 
          if(!empty($admin))
          {
            $back = array();
            $back['command'] = 'user_connect';
            $back['name']    = @$user[$newsock]['name'];
            shipjson($admin, $back);
          }
     }
     if( ($data['command'] == 'admin' or $data['command'] == 'get_users') and $data['secret_key'] == PASSWORD )
     {
        $admin = $read_sock;
        unset($user[$admin]);
               
        $back = array();
        $back['command'] = 'admin';
        $back['clients'] = '';               
                            
          foreach($user as $k => $v)
          {
             $back['clients'][] = $v['name'];
          }
               
        shipjson($admin, $back);               
     }            
     if( $data['command'] == 'update' and !empty($admin) and @$user[$read_sock]['to_connect'] == 'yes')
     {
        $back = array();
        $back['command'] = 'update';
        $back['client']  = @$user[$read_sock]['name'];
        $back['source']  = $data['source']; 
                 
        shipjson($admin, $back);
     }
     if( $data['command'] == 'connect_to' and $read_sock === $admin)
     {
         foreach($user as $k => $v)
         {
            $user[$k]['to_connect'] = 'yes';
         }                        
     }            
  }            
}
 
 
print("[exit]");
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2013, 11:10
Ответы с готовыми решениями:

php и сервер сокет
Доброго времени суток уважаемые. Интересует следующее: как можно организовать чат между exe и php, чтобы php являлся сервером а exe...

Сокет-сервер на php
здравствуйте. извините, если пишу не туда, просто не знаю, куда..)) объясните, пожалуйста, что такое сокет сервер. говорят, что,...

Сокет сервер на php
Друзья помогите разобраться. Есть код сокет сервера php взял его с мануала. Вот что я делал: 1)Создал файл index.php и вставил нижний...

9
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
11.12.2013, 12:07
Проще заставить веб-сервер слушать на 843 порту и отдавать crossdomain.xml для всех вызовов и в кач-ве ErrorDocument для ошибки 400.
1
17 / 17 / 4
Регистрация: 31.05.2013
Сообщений: 38
11.12.2013, 12:09  [ТС]
про 843 порт понял. А зачем ErrorDocument в ошибке 400?
0
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
11.12.2013, 13:04
Потому, что флэш на данный момент делает какой-то дурацкий неHTTP-запрос, который вызовет 400 Bad Request. И вот тут подсовываем файл с политикой. Кстати сейчас проверил - nginx нормально отрабатывает такой запрос, а вот Апач - нет, для него есть отдельный модуль.
0
17 / 17 / 4
Регистрация: 31.05.2013
Сообщений: 38
11.12.2013, 13:51  [ТС]
Цитата Сообщение от Camaro396 Посмотреть сообщение
флэш делает какой-то дурацкий неHTTP-запрос,
Вы имеете ввиду такой запрос:
XML
1
<policy-file-request/>
?

Добавлено через 30 минут
Подскажите пожалуйста как настроить сервер, что бы он отдавал файл политики по 843 порту?
0
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
11.12.2013, 14:09
Для Apache модуль http://socketpolicyserver.com/
Для nginx
Code
1
2
3
4
5
6
7
8
9
10
11
12
server {
        listen 843;        
        location / {
            rewrite ^(.*)$ /crossdomain.xml;
        }
         
        error_page 400 /crossdomain.xml;
         
        location = /crossdomain.xml {
            root путь/к/файлу;
        }
    }
1
17 / 17 / 4
Регистрация: 31.05.2013
Сообщений: 38
11.12.2013, 15:20  [ТС]
Настроил модуль для Apache, все равно сокет соединение не устанавливается с флешкой, запущенной с другого домена ( Если запустить флешку локально(из FlashBuilder) - все работает. )
0
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
11.12.2013, 16:01
Локально политика не проверяется.
1
17 / 17 / 4
Регистрация: 31.05.2013
Сообщений: 38
11.12.2013, 16:07  [ТС]
Цитата Сообщение от Camaro396 Посмотреть сообщение
Локально политика не проверяется.
Это я в курсе, я имел ввиду что сокет сервер работает нормально, и подтветрждение тому - успешное соединение в локале.

А вот если запустить флешку на другом домене - то не работает, значит проблема в модуле для Apache, либо он не работает, либо я его не правильно установил. Помогите плиз разобраться в проблеме.
0
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
11.12.2013, 16:42
Для линухов есть еще
http://code.google.com/p/flash... troduction
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2013, 16:42
Помогаю со студенческими работами здесь

Как грамотно защитить сокет-сервер на PHP паролем
Приложение командной строки PHP, обслуживающее сервер сокетов, сделано в соответствии со следующими рекомендациями: ...

сокет сервер
&lt;?php header('Content-type: text/html; charset=windows-1251'); set_time_limit(0); ob_implicit_flush(); $address =...

Как открыть сокет через прокси сервер?
Помогите пожалуста: как как открыть сокет через прокси сервер? наверно сначала fsockopen до прокси, а затем как-то fsockopen до...

Как отправить на сервер xml запрос с помощью post и получить ответ в xml?
нужно отправить на сервер xml запрос с помощью post и получить ответ в xml, погуглил нашел примеры, осталось лишь проверить примеры на...

Передача на сокет сервер чисел в 16-ричной системе счисления
Добрый вечер! Проблема в том что при передаче чисел первым скриптом они принимаются как надо... Тоесть был отправлен сокет...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru