![]() |
|
||||||||||
|
|||||
|
написал я наконец свой первый сервер
И теперь хочу повесить на него флэшку..код из хелпа: package main{
import flash.display.Sprite;
public class Index extends Sprite {
public function Index() {
var socket:CustomSocket = new CustomSocket("localhost", 31337);
}
}
}
import flash.errors.*;
import flash.events.*;
import flash.net.Socket;
class CustomSocket extends Socket {
private var response:String;
public function CustomSocket(host:String = null, port:uint = 0) {
super(host, port);
configureListeners();
}
private function configureListeners():void {
addEventListener(Event.CLOSE, closeHandler);
addEventListener(Event.CONNECT, connectHandler);
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function writeln(str:String):void {
str += "\n";
try {
writeUTFBytes(str);
}
catch(e:IOError) {
trace(e);
}
}
private function sendRequest():void {
trace("sendRequest");
response = "";
writeln("hello :)");
flush();
}
private function readResponse():void {
var str:String = readUTFBytes(bytesAvailable);
response += str;
}
private function closeHandler(event:Event):void {
trace("closeHandler: " + event);
trace(response.toString());
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
sendRequest();
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function socketDataHandler(event:ProgressEvent):void {
trace("socketDataHandler: " + event);
readResponse();
}
}
Данный код ведет себя довольно странно: при первом подключении ничего не пишет и остается ждать ответа от сервера, при последующих подключениях выводит приветственное сообщение и отключается. Команда в обоих случаях выполняется. Мне же надо, чтобы сокет считывал обе строки и оставался ждать ответа от сервера.
__________________
Пора бы мне уже умнеть.. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Твой сокет может убиваться сборщиком мусора.
Попробуй локальную переменную socket заменить на переменную класса.
__________________
http://realaxy.com |
|
|||||
|
Доброго все мвремени суток, может кто-нибудь поможет мне разобраться с секьюрити для сокет соединения и обновлением для флеш плеера 9,0,155?
Из того, что я знаю: существует 2 вида кроссдоменной хмл : 1- для загрузки флешек, картинок, музыки 2- для общения с сервером по сокетах (о чем и пойдет далее речь) SWF файл я выложил у себя на апаче http://localhost/drag.swf При попытке флешки присоединится к моему ява серверу (localhost,6666) флеш плеер сначала требует кроссдомеину на портах 6666 и 843 ,что сервер ему с радостью и отдает if (str.contains("policy-file-request")) {
System.out.println("cross domain request was accepted. i will send u crossdomain.xml.");
sendToSocket("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"6666\" /></cross-domain-policy>\0", null);
return;
}
Warning: Timeout on xmlsocket://localhost:843 (at 3 seconds) while waiting for socket policy file. This should not cause any problems, but see http://www.adobe.com/go/strict_policy_files for an explanation. Warning: Timeout on xmlsocket://localhost:6666 (at 3 seconds) while waiting for socket policy file. This should not cause any problems, but see http://www.adobe.com/go/strict_policy_files for an explanation. Error: SWF from http://localhost/drag.swf may not connect to a socket in its own domain without a policy file. See http://www.adobe.com/go/strict_policy_files to fix this problem. *** Security Sandbox Violation *** securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://localhost/drag.swf cannot load data from localhost:6666."] |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А loadPolicyFile вызывается?
|
|
|||||
|
может лучше отдельную тему создать, тут речь идет не об хмл сокетах..
Все дело было в сервере. Что бы флэш прочитал строку она должна оканчиваться \r, а у меня заканчивалась \n.. не зря в примере, в конце стоит \r\n..(но я подумал нафиг надо.. первоначальный клиент работал и без \r). вопрос: что делает метод flush()? Цитата:
__________________
Пора бы мне уже умнеть.. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 9
|
О! кстати схожая проблема и столкнулся сегодня.
![]() SecurityError в любом (!) случае вызывается для всех портов кроме 80 (на который нельзя создать сокет сервер) из браузера. Флешка отдельно прекрасно соединяется с сервером. Ну конечно с учетом кроссдомейна.хмл А еще тонкий момент - флешка ДОЛЖНА лежать в директории локалхоста! В под-папках даже отдельно флеха не пашет. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 9
|
Извините за оффтопик.
2 Ноябрь: Твой сервак тоже жрет почти всю процессорную память? |
|
|||||
|
нет.. абсолютно не загружает..
сервак на руби, 2 клиента на руби, 3 флэшки (типа чат) совершенно не загружают проц (я вообще полагаю в том и прикол, что не нагружает проц, в отличии от рефрешей..). У меня другая проблема - не могу обновить массив клиентов после отключения одного из них, но, надеюсь скоро разберусь.. а потом пойму и что такое flush().. ![]()
__________________
Пора бы мне уже умнеть.. |
|
|||||
|
Цитата:
гружу его по xml сокету, правда не знаю, можно ли локально |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Где вы в документации видели такой url?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 06:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|