• ||
    FLEX - Socket 통신 및 UTF 16 처리 방법 ( )
  • 2009/09/10
  •  

  • 안녕하세요? 수원멤버십 18-2기 백성욱입니다.

    이번 포스팅 주제는 FLEX 에서 Socket 통신하는 방법과 UTF-16 처리 방법입니다.

     

    FLEX에서 소켓통신을 하기 위해서는 Socket 객체를 사용해야 됩니다.

     

    image

    image

     

    먼저 소켓 객체를 생성하고 connect(“연결할 서버”, “포트번호) 이런 식으로 함수를 호출하면 연결이 완료됩니다. 그리고 FLEX에서는 거의 모든 객체가 EventListener 라는 함수를 가지고 있는데 소켓통신에서도 상당히 유용하게 쓰입니다.

    위의 코드를 예로 설명 드리겠습니다.

    먼저 socket에서 사용하는 이벤트로 Event.CONNECT 와 ProgressEvent.SOCKET_DATA 가 있습니다.

    Event.CONNECT:

    소켓이 연결이 되었을 경우 발생하는 이벤트로서 addEventListener 함수의 2번째 파라미터에 호출할 함수를 지정해주면 해당 이벤트가 발생할 때마다 호출하게 됩니다.

    ProgressEvent.SOCKET_DATA:

    연결된 socket 객체로부터 전달받는 DATA가 있을 경우 발생하는 이벤트입니다. 쉽게 이야기해서 보통 C 에서는 while(1) 상태로 소켓으로부터 전달받는 DATA를 기다리고 있는 데 FLEX 에서는 위와 같이 addEventListener 함수에 이벤트와 함수를 등록함으로써 해결할 수 있습니다.

     

    다음으로 소켓으로 서버에게 데이터를 전송하고 받는 과정을 설명 드리겠습니다.

    image 

    일단 FLEX에서 서버로 전송하는 내용이 총 12 byte 라고 가정하고 설명 드리겠습니다.

    4byte : 전체 전송하는 바이트 크기

    4byte : 데이터 번호

    4byte : 패킷 Number

     

    위와 같은 정보를 서버에게 보내기 위해서 일단 ByteArray 이라는 객체를 선언합니다. 일반적인 Array 와 다른 점은 모든 데이터를 byte로 처리한다는 점입니다.

    숫자관련 정보의 경우 다음과 같은 함수들을 사용합니다.

    4byte의 정보를 숫자로 보내고 싶을 경우

    writeInt();

    2byte의 정보를 숫자로 보내고 싶을 경우

    writeShort();l

    만약 Unsigned형으로 보내고 싶을 경우 위의 함수에 Unsigned만 붙여주면 됩니다.

    ex) writeUnsignedInt() ;

     

    ByteArray에 저장된 내용을 서버와 연결된 Socket 객체를 통해 전송하고 싶을 경우 일단 Socket 객체의 버퍼에 전송할 내용을 저장합니다.

    이 방법은 ByteArray 에 정보를 저장하는 것과 동일합니다.

    writeBytes(ByteArray 객체, 전송할 내용의 시작 번지, 전송할 내용의 총 Byte 사이즈);

     

    위에서 보면 bytesAvailable 이라는 것이 있는 데 이것은 ByteArray 객체가 가지고 있는 바이트의 크기를 의미합니다. 이 함수는 특히 서버로부터 전송 받는 데이터를 처리할 때 유용하게 쓰입니다.

     

    마지막으로 flush() 함수를 호출함으로써 연결된 서버에게 데이터를 전송하게 됩니다.

     

    다음은 소켓으로부터 받은 데이터 처리 방법입니다.

     

    image

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    다음은 UTF 16 처리 방법입니다. 사실 FLEX에서 기본적으로 UTF 16을 지원해주는 줄 알고 있었고 실제로 FLEX 개발문서를 보아도 이 부분에 대한 지원이 명시되어있었습니다.

    하지만 FLEX 개발자 커뮤니티 같은 곳에서 확인해보면 이 문제에 대한 논의가 많습니다. 된다, 안 된다 등등… 이번에 프로젝트할때도 사실 readMultiByte(“읽을 바이트 수”, “char-set”) 이런 식으로 해보았지만 해결되지 않아서 별도로 클래스를 만들어서 처리하는 작업을 진행하였습니다.

     

    서버로부터 받은 UTF-16 정보를 String로 변환하는 함수

    image

     

    FLEX 에서 서버로 전송할 때 String 정보를 UTF-16 로 변환하는 함수

    image

     

    이상으로 포스팅을 마치겠습니다. 감사합니다. ^^


  •  
  • TRACKBACK : http://www.swssm.org/trackback.php?id=343
  •  
  •  
  • [prev] ... 1 ... [next]
 
삼성전자 소프트웨어 멤버십
과제 Tech Note 입니다.

최근 글