보내는 스트링은 앞뒤를 식별가능한 고유 스트링으로 감싸야합니다.

예를 들어 쏘는 데이터를

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 로 스트링으로 변환, 앞뒤 식별스트링 붙인 후 처리하시면 됩니다.

아 그리고 이 방식은 스트링이 처리하기가 가장 편하여 사용한 방식입니다. 기타 데이터포맷도 잘 다루시는 분이면 다른 테이터포맷으로 하셔도 무방합니다. ^^
Posted by 미랭군