보내는 스트링은 앞뒤를 식별가능한 고유 스트링으로 감싸야합니다.
예를 들어 쏘는 데이터를
var sendData:String = "<xxx>~~~~</xxx>"
라고 하면, (* <xxx>와 </xxx>는 데이터 앞뒤를 구분하기 위해 임의로 붙임)
function onReceiveData(e:ProgressEvent):void
{
var str:String = Socket(e.target).readMultiByte(Socket(e.target).bytesAvailable, "utf-8");
parsingSocketData(str);
}
var socketStr:String; //조각난 데이터 저장 스트링
function parsingSocketData(str:String):void
{
if (str.substr(0, 5) == "<xxx>")
{
socketStr = str;
}
else
{
socketStr += str;
}
if (socketStr.substr(-6, 6) == "</xxx>")
{
//socketStr :: 최종 데이터 완성
//이후 데이터 처리
}
}
와 같이 처리하면 아무리 큰 스트링이라도 처리 가능합니다.
그리고, 한가지 더.
오브젝트를 쏠 때도 마찬가지로 1600바이트 근처가면 데이터가 나눠져서 넘어가게 되는데..
오브젝트는 이 방식으로 체크하기가 편치가 않죠.
그럴때는 ObjectSerialization 같은 패키지를 구하셔서 object -> string으로 변환한뒤
위의 방식으로 쏘시고, 받고, 다시 object로 변환하시면 됩니다.
byteArray 같은 경우도 일단 compress해서 무리없이 넘어간다면 괜찮지만(byteArray는 무조건 compress하세요. byteArray만의 큰 매리트입니다), 에러가 발생한다면
readMultiByte 로 스트링으로 변환, 앞뒤 식별스트링 붙인 후 처리하시면 됩니다.
var socketStr:String; //조각난 데이터 저장 스트링
function parsingSocketData(str:String):void
{
if (str.substr(0, 5) == "<xxx>")
{
socketStr = str;
}
else
{
socketStr += str;
}
if (socketStr.substr(-6, 6) == "</xxx>")
{
//socketStr :: 최종 데이터 완성
//이후 데이터 처리
}
}
와 같이 처리하면 아무리 큰 스트링이라도 처리 가능합니다.
그리고, 한가지 더.
오브젝트를 쏠 때도 마찬가지로 1600바이트 근처가면 데이터가 나눠져서 넘어가게 되는데..
오브젝트는 이 방식으로 체크하기가 편치가 않죠.
그럴때는 ObjectSerialization 같은 패키지를 구하셔서 object -> string으로 변환한뒤
위의 방식으로 쏘시고, 받고, 다시 object로 변환하시면 됩니다.
byteArray 같은 경우도 일단 compress해서 무리없이 넘어간다면 괜찮지만(byteArray는 무조건 compress하세요. byteArray만의 큰 매리트입니다), 에러가 발생한다면
readMultiByte 로 스트링으로 변환, 앞뒤 식별스트링 붙인 후 처리하시면 됩니다.
아 그리고 이 방식은 스트링이 처리하기가 가장 편하여 사용한 방식입니다. 기타 데이터포맷도 잘 다루시는 분이면 다른 테이터포맷으로 하셔도 무방합니다. ^^
'플렉스·플래시·액션스크립트3' 카테고리의 다른 글
링크 걸기 (0) | 2012.01.09 |
---|---|
[AS3] 신기한 액션스크립트를 한번에.. (0) | 2012.01.09 |
null check에 대한 고찰.. (0) | 2012.01.04 |
[Inspectable] 메타 태그 사용하기 (0) | 2011.11.11 |
flex4에서 flashvars 사용하기 (0) | 2011.05.11 |