|
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
Ошибки при пересоединении сокета.
Ситуация следующая. Есть список нескольких профилей, содержащих параметры коннектов к разного рода устройствам.
Есть класс, создающий и обслуживающий эти самые соединения (сокетные). //В конструкторе создан сокет и слушатели sender = new Socket(); initListeners() ... private function initListeners():void { sender.addEventListener(Event.CONNECT, onSenderConnect); sender.addEventListener(ProgressEvent.SOCKET_DATA, onSendData); sender.addEventListener(Event.CLOSE, onSenderClosing); sender.addEventListener(IOErrorEvent.IO_ERROR, onIOErr); sender.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurErr);/**/ } //Получаем профиль и соединяемся... public function set profile(value:Object):void { for (var i:String in value) this[i] = value[i]; sender.connected?sender.close():null; sender.connect(host, int(port)); } Возможно ли как-то победить это? |
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
Цитата:
// private function newSenderSocket():Socket { var s:Socket = new Socket(); s.addEventListener(Event.CONNECT, onSenderConnect); s.addEventListener(ProgressEvent.SOCKET_DATA, onSendData); //sender.addEventListener(Event.CLOSE, onSenderClosing); s.addEventListener(IOErrorEvent.IO_ERROR, onIOErr); s.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurErr); return s; } private function removeSenderSocket():void { if (sender) { sender.connected ? sender.close() : null; sender.removeEventListener(Event.CONNECT, onSenderConnect); sender.removeEventListener(ProgressEvent.SOCKET_DATA, onSendData); sender.removeEventListener(IOErrorEvent.IO_ERROR, onIOErr); sender.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurErr); } sender = null; } |
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
private function newSenderSocket():Socket { var s:Socket = new Socket(); s.addEventListener(Event.CONNECT, onSenderConnect); s.addEventListener(ProgressEvent.SOCKET_DATA, onSendData); //sender.addEventListener(Event.CLOSE, onSenderClosing); s.addEventListener(IOErrorEvent.IO_ERROR, onIOErr); s.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurErr); return s; } private function removeSenderSocket():void { if (sender) { sender.connected ? sender.close() : null; sender.removeEventListener(Event.CONNECT, onSenderConnect); sender.removeEventListener(ProgressEvent.SOCKET_DATA, onSendData); sender.removeEventListener(IOErrorEvent.IO_ERROR, onIOErr); sender.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurErr); } sender = null; }
__________________
мой пустой блог |
|
|||||
Не совсем уверен, но поробуй остановить дальнейшую обработку события об ошибке после обработки его контроллером
|
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
2 iflamberg Все меняется. Процедура, как видите, возвращает свежий сокет. Он и становится сендером, для нового профиля. Для этого в "set profile" добавлено:
Говорю ж - не спасло. 2 C4Grey )) Попробую, спасибо! Алогично конечно, но что-то не придумывается ничего. Не спасло. Складывается впечатление, что этот IOError, каким-то непостижимым образом кешируется и "считает", что все остальные профили гиблые. Последний раз редактировалось MOHCTEP; 18.04.2013 в 16:46. |
|
|||||
Возможно, стоит посмотреть нет ли какой-то ошибки при подключении:
Да, и может стоит подключать следующий после обработки CLOSE предыдущего сокета? |
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
Что интересно, событие CLOSE не приходит. Видимо железки просто его не шлют. Однако сокет я рассоединяю же "вручную".
И трейс кажет, что он не соединен в момент нового коннекта. try-catch ничего не показал в трейсе. Ей-ей - фантастика какая-то. Непонятно, что даже свежесозданный сокет ведет себя этак странно. |
|
|||||
[+4 24.04.13]
[+4 20.04.13] Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
|
какаето жуткая проверка
и попробуй чистить буфер после каждой отправкой а вообще сокеты отлично работают во флеше, обычно причиной является кривой код |
|
|||||
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
При наличии сокета, чистим листенеры и при этом если сокет в коннекте - принимаем меры. В чем жуть этой конкретной конструкции?
Буфер естественно чистится, однако, он-то здесь при чем? Цитата:
Имеет ли значение, что это AIR проект? Судя по хелпу, вроде параллельно... |
Часовой пояс GMT +4, время: 18:00. |
|
« Предыдущая тема | Следующая тема » |
|
|