Обработка сокетов
Всем, здравствуйте.
Долго мучился, но все таки (не без вышей помощи) сделал авторизацию на своем чате. Теперь новая проблема: Нужно чтобы при входе в чат, логин передавался серверу путем сокета и использовался в качестве имени при общение. Соединение установил и вроде все должно работать, но при компиляции в области вывода выходят эти ошибки: Код:
Error #2044: Необработанный ioError:. text=Error #2031: Ошибка сокета. Подскажите пожалуйста, что это за ошибки и как исправить? Заранее благодарен! |
1.
Цитата:
2. Работает ли секьюрити-сервер на 843 порту, раздающий политики безопасности? 3. Не закрыт ли сокет на клиенте при попытке обращения к нему? |
Вот полный результат вывода:
Код:
Успех! Код:
import java.io.*; Код AS3:
|
Во-первых давайте разберемся, вы используете класс Socket или XMLSocket? Во-вторых, у вас сервер запущен локально (localhost)? В-третьих, сокеты - штука асинхронная. То есть нельзя после вызова функции socket.connect(...) тут же пытаться слать какие-нибудь данные (socket.send("test \n")). Сначала нужно дождаться события, извещающего вас о том, что подключение произошло (Event.CONNECT). Ответьте на первые два вопроса, а то из кода мало что понятно.
|
Я использую XMLSocket. Сервер запущен в localhost. Пробовал
Цитата:
Результат нолевой! Изначально код был такой: Код AS3:
Большое спасибо за ссылки, но я их уже почти выучил на изучь. Добавлено через 10 минут Ошибка может быть в том, что я не могу разобраться, где размещать файл политики. Добавлено через 14 часов 6 минут Так, одно проблема решена! Теперь я уже точно знаю, что сервер принимает сообщение, но не оправляет. Причина тоже ясна, не добавляется нолевой бфйт. Попытка прописать добавление в коде, Компилятор меняет на свое или выдает ошибку, при ручном редактирование. Подскажите как быть? Добавлено через 15 часов 41 минуту Всем спасибо. Разобрался сам. тема закрыта. |
Напишите, если не лень и для будущих поколений, в чем была ошибка и как вы ее решили.
|
Я прошу прощение у всех, но оказывается рано радовался!! После того, как я повесил обработчики событий и правильно прописал вывод, обнаружил, что не в чем я не разобрался! А ошибки как были так и остались. Вот эти две ошибки:
Код:
#1034: Ошибка типа Coercion: невозможно преобразовать flash.events::IOErrorEvent@2ea93469 в flash.errors.IOError. Код:
[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Нарушение изолированной среды: file:///E|/WebServers2/home/videochat/www/avfc%5F1%5F0.swf не может загрузить данные из :2525."] |
При первой передаче данных на сервер флеш плеер создает еще один сокет на 843 порту (по умолчанию) и отсылает по нему серверу строку "<policy-file-request/>". Строка эта всегда одной длины, так что на сервере можно читать одинаковое количество байтов. В ответ флеш плеер хочет получить файл политики безопасности — тоже строку — в котором будет описано, может ли клиент подключаться к серверу. И если нет или же в ответ ничего не приходит, то:
Цитата:
Код AS3:
Добавлено через 6 минут Ну и по сокетам и байтам будет полезно. |
Уже десять дней топчусь во круг сщкетов. Не ни кто не может помочь? Я перепробовал все выше предлагаемые варианты, но эффекта - 0.
Вот все мои коды: Сервер Код:
import java.net.*; Код:
i<?xml version="1.0"?> Код AS3:
Код:
ioErrorHandler: |
Вам уже советовали сделать сервер на порту 843, этого порта я в коде не нашел. Далее. Где-то в мейне (в кадре, что ли?) вы коннектитесь к порту 4444 (запрос полиси придет на 843). А ваш сервер слушает на 2525 первого запроса. Очевидно, на 4444 никто не ответит. Затем в onEnter вы коннектитесь на порт 2525 (при этом запрос на полиси опят придет на 843, если отказ не будет закэширован). И только после этого вы загружаете policy file. Вот эта попытка может быть даже проиходт успешно. Только не факт, что ваш полиси-файл разрешит соединяться с другим портом (в asdoc по Security и в разделе Security справки оно может быть по-разному трактовано). Ваш трейс, вероятно, из кадра еще выводится (номеров строк и названий методов нет).
Кроме того, я не уверен в корректности вашей java-части. Во-первых, вы можете не до конца читать ваш файл политики. Более того, вы вполне можете прочитать 0 байт. Это укладывается в контракт available! Читайте документацию на этот метод. Во-вторых, вы можеет вычитать запрос policy-file-request не полностью, но это в данном случае не важно (да и маловероятно). В третьих. Не out.flush(), socket.close(); Правильно socket.shutdown(); socket.close(). Иначе что-то отправленное может не дойти. Не поддерживают внутри себя сокеты flush, особенность у них такая. |
Часовой пояс GMT +4, время: 02:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.