|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Modus ponens
|
Нужна помощь в настройке Apache + PHP сокет + AS
Не могу понять как настроить апач, чтобы при попытке коннекта на 843 порт отдавался crossdomain.hml =(
В httpd.conf добавил Listen 843 в корневой директории лежит такой вот пхп: <?php // set some variables $host = "127.0.0.1"; $port = 843; $log = fopen("socket_log.txt", "w"); fwrite($log, "Socket log: status 0\n"); fclose($log); // don't timeout! set_time_limit(0); // create socket $socket = socket_create(AF_INET, SOCK_STREAM, 0); if (!$socket) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not create socket\n"); fclose($log); exit(); } // bind socket to port $result = socket_bind($socket, $host, $port); if (!$result) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not bind to socket\n"); fclose($log); exit(); } // start listening for connections $result = socket_listen($socket, 3); if (!$result) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not set up socket listener\n"); fclose($log); exit(); } // accept incoming connections // spawn another socket to handle communication $spawn = socket_accept($socket); if (!$spawn) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not accept incoming connection\n"); fclose($log); exit(); } // read client input $input = socket_read($spawn, 1024); if (!$input) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not read input\n"); fclose($log); exit(); } // clean up input string $input = trim($input); // reverse client input and send back $output = "<?xml version=\"1.0\"?> <!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\"> <cross-domain-policy> <allow-access-from domain=\"*\" to-ports=\"843,1234\" /> </cross-domain-policy>"; $out = socket_write($spawn, $output, strlen ($output)); if (!$out) { $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not write output\n"); fclose($log); exit(); } // close sockets //socket_close($spawn); //socket_close($socket); ?> package { /** * ... * @author wvxvw */ import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.net.Socket; import flash.utils.ByteArray; import flash.external.ExternalInterface; import flash.system.Security; import flash.events.Event; public class PNGSocket { private var sc:Socket; private var ba:ByteArray; public function PNGSocket() { Security.loadPolicyFile("xmlsocket://127.0.0.1/sock_crossdomain.php"); sc = new Socket('127.0.0.1', 843); sc.connect('127.0.0.1', 843); sc.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); sc.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); sc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); sc.addEventListener(Event.CONNECT, connectHandler); } public function sendPNG(b:ByteArray = null):void { ba = new ByteArray(); } private function socketDataHandler(evt:ProgressEvent):void { trace('data recieved: ' + evt); ExternalInterface.call('alert', 'DATA'); } private function ioErrorHandler(evt:IOErrorEvent):void { trace('connection error: ' + evt.text); ExternalInterface.call('alert', 'IO ERROR'); } private function securityErrorHandler(evt:SecurityErrorEvent):void { trace('security error: ' + evt.text); ExternalInterface.call('alert', 'SECURITY ERROR\r'+evt.text); } private function connectHandler(evt:Event):void { trace('connection established: ' + evt); ExternalInterface.call('alert', 'CONNECTION'); sc.writeUTF("Hi!"); } } } connection established: [Event type="connect" bubbles=false cancelable=false eventPhase=2] // sc.writeUTF("Hi!"); ничего не посылает либо ПХП ничего не возвращает =/ Самое удивительное то, что ПХП в любом случае лог не пишет (но если просто обратиться к нему из браузера, то лог будет создан) Через браузер - секьюрити еррор...
__________________
Hell is the possibility of sanity |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Через xmlsocket:// указывается только хост, а не имя файла.
|
|
|||||
Modus ponens
|
Хм... ок, оказалось, что как раз httpd.conf трогать не надо было...
имя файла убрал, вообще убрал Security.loadPolicyFile() она все равно вызывается. Все равно, пока что результатов никаких =( Сделал ненмого по-другому: флеш сначала посылает запрос сюда http://127.0.0.1/sock_crossdomain.php (этот файл должен запустить сокет), а дальше пытается законектится на все тот же 843 порт... естесственно, ошибка безопасности... Да, и еще, если я просто пытаюсь из строки браузера запустить пхп - получаю следующую ошибку: Цитата:
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 08.06.2008 в 00:21. |
|
|||||
А, можно поподробнее, что должно получится, когда ето все будет работать?
Сокеты служат для передачи данных по сети. С их помощью можно общаться с портами удаленного сервера. Работа с сокетами подобна работе с файлами в РНР. А это что за фича $log = fopen("socket_log.txt", "w"); fwrite($log, "Could not accept incoming connection\n"); fclose($log); exit(); fsocketopen(); например Я такие фишки пробовал делать, они ни фига не работают, нужно откомпилировать флешку засунуть ее на виртуальный сайт и запускать через адресную строку. Например dnadillo.dn.ua/my_swf.swf И она будет подгружать в себя все что угодно из того что расположено на сайте dnadillo.dn.ua |
|
|||||
Modus ponens
|
Это не фишка... просто в файл пишется лог о том, что смог/не смог сделать скрипт...
И этот скрипт никогда не будет доступен по сети, только локально, это его предназначение... т.е. флешка используется для того, чтобы рендерить картинки и посылать их "по почте" на сохранение. Т.е. в итоге, что мне нужно сделать: шаг 1: запустить из флешки скрипт, который в свою очередь запустит сокет. шаг 2: дожаться сообщения, что сокет запущен и подключится к нему. шаг 3: послать картинку -> дождаться сообщения, что картинка сохранилась, и так очень много раз =) шаг последний: сообщить сокету, что нужно закрыться. Т.е. все то же самое я могу сделать ХТТП запросами... но это маразм, т.как на каждую картинку прийдеться отправлять по 2 запроса (1 с параметрами название файла, номер сессии и т.п.) второй уже с самой картинкой. Кроме того, в идеале будет реализован мультитрединг... а это значит, что запросы могут легко перепутаться и тогда понеслась... Либо, немного улученный вариант - в байтарей с картинкой дописывать все те же название, сессию и т.п. но все равно, куча лишнего мусора будет пересылаться... Сокет был бы оптимальным решением т.как большинство параметров идентичны, и на самом деле мне нужно их послать 1 раз в начале, и посигналить, когда все картинки одного типа были высланы... ЗЫ. Конечная реализация все равно будет на АСПХ, но мне пока для тестов надо ПХП =( не то, чтобы я его хорошо знал, но АСПХ - вообще темный лес, да и я повешусь у себя дома еще и ИИС поставить со всем .НЕТовским фреймворком... Единственное, что точно работает - при попытке обратиться к http://127.0.0.1:843 приходит вот это <?xml version="1.0" ?> <!DOCTYPE cross-domain-policy (View Source for full doctype...)> - <cross-domain-policy> <allow-access-from domain="*" to-ports="843,1234" secure="false" /> </cross-domain-policy> В итоге доработался до такого... вопрос, как у меня могло это получиться, если сокет всего 1? =\ Цитата:
и при этом если пойти по ссылке http://127.0.0.1:1234 в браузер выдается именно такой crossdomain.хml, как указано в доках... =(
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 08.06.2008 в 04:59. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Должен быть запущен сокет-сервер, а не http-сервер на 843-ем порту.
|
|
|||||
Регистрация: Mar 2008
Сообщений: 259
|
Кстати, насколько я знаю, тот же апач при определенной сборке может быть сокет-сервером.
Самому проблема стала интересна Если получится настроить нормально работающий клиент-сервер с апачем на сокетах, то хотелось бы, чтобы решение показали (если оно, конечно коммерческим секретом не является ) |
|
|||||
Modus ponens
|
угу... осознание этого пришло только на вторые сутки %)
Сайлас: не, то что я делаю - исключительно для себя, для тестов, так что если получится - конечно покажу =) ЗЫ. Самое обидное, что на каком-то этапе в трейсе появилось сообщение о том, что сокет приконектился... но как я это сделал... Но, похоже, что все-таки можно научить апач принимать нестандартные сообщения по TCP... нужно добавить handler"ы, которые бы объясняли, что нужно делать, если пришел нестандартный http заголовок... но это все теория... на практике это значит, что мне нужно будет сейчас переинстолить ПХП как SGI скрипт, да и все равно не факт, что это будет работать... вобщем, похоже прийдеться кого-то из знакомых просить, чтобы на C/Javе сервер написали...
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 08.06.2008 в 16:52. |
|
|||||
стервочка (я мужик)
|
апач и есть сокет сервер слушает он 80й портю вообще ХТТП этот тоже сокет, просто он закрывается сразу после запроса. и запрос имеет специфичный вид.
Олег, секурнасть по сокету нужна только в том случаи, если ты используешь сокетное соединение. если ты собираешься просить людей, что бы они написали тебе простейшее серверное приложение, то кто тебе пишет сервер, для которго понадобился данный вид получение секуритифайла? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Это понятно. Только в понимании большинства флешеров сокет-сервер суть не http-сервер, а кастомный. То, что технически и то и другое по одному принципу работает, не имеет никакого значения.
|
Часовой пояс GMT +4, время: 13:02. |
|
« Предыдущая тема | Следующая тема » |
Теги |
apache , crossdomain , security , socket |
|
|