Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.02.2012, 18:07
VInchensoo вне форума Посмотреть профиль Отправить личное сообщение для VInchensoo Найти все сообщения от VInchensoo
  № 1  
Ответить с цитированием
VInchensoo

Регистрация: Jan 2012
Сообщений: 9
По умолчанию Данные по сети приходят с большим опозданием(Socket: as3.0 + java)

Добрый день. Не так давно работаю на actionscripts3.0, занялся созданием клиент-серверного взаимодействия и столкнулся с проблемой:

Ее суть состоит в том, что пакеты с сервера в клиент идут с задержкой, приходят частями, т.е. рвутся.

Пробовал сначала писать первым байтом длину пакета, ничего не выходит с проверкой в клиенте.

На сервер все уходит на ура, обратно возникают проблемы.

Коды сервера и клиента прилагаются. Есть идеи, как решить? XML и фреймворки не хотелось бы.

Насчет размера пакета не уверен, учитывается ли байт размера, писал и 12, и 13- трассировщиком ничего отловить внятного не смог. Из моих наблюдений:

1. Пакет всегда рвется на разные части, определяется каким-то великим рандомом.
2. Функция sData(см. код) вызывается ровно 2 раза(если 3 порции информации, то в третий раз вызова нет и обработка не происходит).

Коды:

AS3.0:

Код AS1/AS2:
package {
	import flash.display.Sprite;
	import flash.net.Socket;
	import mx.core.BitmapAsset;
	import flash.events.*;
 
	public class Main extends Sprite {
 
		[Embed(source = 'load11.jpg')] private var load11:Class;
 
 
		public var buff: int;
		public function Main():void {
 
			var load11:BitmapAsset = new load11();
			var spr:Sprite = new Sprite();
			spr.addChild(load11);
 
			addChild(spr);
 
 
 
 
			spr.addEventListener(MouseEvent.CLICK, func);
 
 
 
			function func(event:MouseEvent):void
			{
				trace("use socket");
 
 
				var s: Socket = new Socket();
				s. addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
				  function ioErrorHandler(event:IOErrorEvent):void {
					trace("ioErrorHandler: " + event);
																			}
 
				s.connect("localhost", 1011);
				var str: String;
				str = 'Test';
 
 
			s.writeByte(10); s.writeUTF(str); s.writeByte(15); s.writeUTF(str); s.flush(); buff = -1;
 
 
				s.addEventListener(ProgressEvent.SOCKET_DATA, sData);
 
				function sData(event:ProgressEvent):void
				{
 
 
					if (buff == -1) { buff = s.readByte(); }
 
					if (buff == event.bytesLoaded)
					{
 
					var x:int, y:int, l:int;
					var z:String;
					var z1: String;
 
					x = s.readByte();
					trace(x);
 
					y = s.readByte();
					trace(y);				
 
					z = s.readUTF();
					trace(z);
 
 
					} else { trace("not ready: " + event.bytesLoaded + " " + buff ); }
 
				}
			}
 
 
		}
	}
}
JAVA:

Код:
/* ChatServer.java */
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

class Server {
    private static int port = 1011; /* port the server listens on */

    public static void main (String[] args) throws IOException {
        ServerSocket server = null;
        try {
            server = new ServerSocket(port); /* start listening on the port */
        } catch (IOException e) {
            System.err.println("Could not listen on port: " + port);
            System.err.println(e);
            System.exit(1);
        }

        Socket client = null;
        try {
            client = server.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.err.println(e);
            System.exit(1);
        }


        DataInputStream in = new DataInputStream(client.getInputStream());
        
        DataOutputStream os = new DataOutputStream(client.getOutputStream());
        
        System.out.println("I Live!!!");
        
 
     

        byte msg, def;
        String str; 
        /* loop reading lines from the client and display them */
        
        msg= in.readByte();
        
        if (msg!=-1){  	str= in.readUTF();
        				def=in.readByte();
        				str= in.readUTF();
        				System.out.println("Client says: " + msg + " "+ str + " : " + def); 
        			 	msg= (byte) (msg+17);
        				def= (byte) (def *2);
           				str="test";
           		
      
           				
           				os.writeByte(12);//Размер пакета
           				
           				os.writeByte(msg);
           				
        				os.writeByte(def);
        				
        				os.writeUTF(str);		
        		
        			
        				os.flush();
        				
        				}
        
    }
}


Последний раз редактировалось VInchensoo; 12.02.2012 в 18:38.
Создать новую тему   Часовой пояс GMT +4, время: 15:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.