Тема: Flash сокеты
Показать сообщение отдельно
Старый 25.01.2012, 14:07
TrueTrAxeX вне форума Посмотреть профиль Отправить личное сообщение для TrueTrAxeX Найти все сообщения от TrueTrAxeX
  № 1  
Ответить с цитированием
TrueTrAxeX

Регистрация: Nov 2011
Сообщений: 10
По умолчанию Flash сокеты

Здравствуйте, хотелось бы рассказать о своей проблеме. У меня есть Java Server (Java клиент с ним нормально работает).

Я создал клиент на FLASH и тут начались проблемы. Когда происходит соединение с сервером, возможно только первые 2-3 секунды общаться с сервером! Дальше флешка просто ничего не посылает!

Вот код класса для работы с сокетами (в порядок не приводил):
Код AS3:
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;
		}
 
	}
 
}
В 1 кадре (и последнем) пишу код для создания экземпляра и работы с сокетом.

Код AS3:
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.