![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 9
|
Добрый день. Не так давно работаю на actionscripts3.0, занялся созданием клиент-серверного взаимодействия и столкнулся с проблемой:
Ее суть состоит в том, что пакеты с сервера в клиент идут с задержкой, приходят частями, т.е. рвутся. Пробовал сначала писать первым байтом длину пакета, ничего не выходит с проверкой в клиенте. На сервер все уходит на ура, обратно возникают проблемы. Коды сервера и клиента прилагаются. Есть идеи, как решить? XML и фреймворки не хотелось бы. Насчет размера пакета не уверен, учитывается ли байт размера, писал и 12, и 13- трассировщиком ничего отловить внятного не смог. Из моих наблюдений: 1. Пакет всегда рвется на разные части, определяется каким-то великим рандомом. 2. Функция sData(см. код) вызывается ровно 2 раза(если 3 порции информации, то в третий раз вызова нет и обработка не происходит). Коды: AS3.0: 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 ); } } } } } } /* 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|