![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2011
Сообщений: 10
|
Здравствуйте, хотелось бы рассказать о своей проблеме. У меня есть Java Server (Java клиент с ним нормально работает).
Я создал клиент на FLASH и тут начались проблемы. Когда происходит соединение с сервером, возможно только первые 2-3 секунды общаться с сервером! Дальше флешка просто ничего не посылает! Вот код класса для работы с сокетами (в порядок не приводил): package org.conn { import flash.errors.*; import flash.events.*; import flash.net.Socket; public class CustomSocket { var CSsocket:Socket = new Socket(); public function CustomSocket(host:String = null, port:uint = 0) { CSsocket.timeout = 100000; CSsocket.connect(host,port); configureListeners(); } private function configureListeners():void { //socket.addEventListener(Event.CLOSE, this.closeHandler); //socket.addEventListener(Event.CONNECT, this.connectHandler); //socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); CSsocket.addEventListener(Event.CONNECT, Connected); //socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); } private function ErrorHandler(event:Event):void { trace("FSDFSDF"); } private function Connected(event:Event):void { trace("Успешное соединение! "); } private static const _TRIM_PATTERN:RegExp = /^\s*|\s*$/g; public static function trim(text:String):String { return text.replace(_TRIM_PATTERN, ""); } public function socketWrite(Message:String) { CSsocket.writeUTF(Message); } public function socketRead():String { var CountBytes:int = CSsocket.bytesAvailable; var Response:String = trim(CSsocket.readUTFBytes(CountBytes)); return Response; } private function socketDataHandler(event:ProgressEvent):String { var CountBytes:int = CSsocket.bytesAvailable; var Response:String = trim(CSsocket.readUTFBytes(CountBytes)); trace("socketDataHandler: " + Response); return Response; } } } Security.loadPolicyFile("xmlsocket://localhost:813"); function Connect(event:Event):void { var CSsocket:CustomSocket = new CustomSocket("localhost", 5000); CSsocket.socketRead(); CSsocket.socketWrite("gasdg"); } Я понимаю, что если много раз нажимаешь на кнопку, которая вызывает функцию Connect, то порт будет просто занят. Но почему когда я закрываю сокет после отправки и принятия данных, Flash выдает ошибку? Я умею размещать начальный код для запуска всего механизма только в кадре, может быть еще можно где-нибудь размещать? (я начинающий флешер, до этого программировал на PHP, C#, Java, JS). P.S: Policy File работает на ура! Последний раз редактировалось TrueTrAxeX; 25.01.2012 в 14:17. |
|
|||||
|
Зачем вам 2 раза открывать соединение? Почему первое соединение не закрываете?
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: Nov 2011
Сообщений: 10
|
А как дождаться момента, чтобы оно произошло? Скажите пожалуйста.
|
|
|||||
|
Вот здесь у вас уже произошло соединение.
Добавлено через 4 минуты Цитата:
Если вы не аниматор, то использовать Flash Professional (Flash IDE) вам смыла особого нет, можете подобрать себе нормальную IDE из этого списка (список не полный, но там перечислены наиболее популярные IDE).
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
function Connect(event:Event):void { var CSsocket:CustomSocket = new CustomSocket("localhost", 5000); //У вас еще не произошло еще подключение, а читать и писать вы уже начали CSsocket.addEventListener("myTestEvent" , connectSucces); CSsocket.connect(); } private function connectSucces(e:Event):void { var CSsocket:CustomSocket = e.currentTarget as CustomSocket; CSsocket.socketRead(); CSsocket.socketWrite("gasdg"); } public class CustomSocket extends EventDispatcher{ private var _host:String; private var _port:uint; public function CustomSocket(host:String = null, port:uint = 0) { this._host = host; this._port = port; CSsocket.timeout = 100000; configureListeners(); } public function connect():void { CSsocket.connect(_host,_port); } private function Connected(event:Event):void { trace("Успешное соединение! "); this.dispatchEvent(new Event("myTestEvent")); } }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
и вроде надо листенер вешать до того как вызываете метод connect
|
|
|||||
|
Не обязательно, это асинхронная операция, соединение будет установлено, в любом случае, после того как отработает функция в которой был вызван connect.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Nov 2011
Сообщений: 10
|
Запихал в класс данный код. Все равно не может отослать ничего на сервер. Сервер не выводит присланный логин. Что же может быть?
|
|
|||||
|
Регистрация: Dec 2011
Сообщений: 40
|
Для as3 посоветовал бы FlashDevelop
Времени нет сразу разобрать что вы сделали в последнем сообщении... но код в начале темы гораздо нагляднее... 1.Вам стоило только поместить все действия с соединением (из последнего кадра), после срабатывания слушателя на подключение... и вызова слушателем функции Connected 2.loadPolicyFile следует вызывать перед коннектом... 3.CSsocket.socketWrite("gasdg"); - Здесь нужно в конце строки поставить \n... Вот так: CSsocket.socketWrite("gasdg\n"); Думаю пункт 3 и будет решением... |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|