마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소켓 통신 질문입니다.

0 추천
wifi로 소켓통신하고있습니다.

 

setPreviewCallback 을 이용하여  yuv 이미지 변환을 하여 데이터를 전송하도록하고있습니다

 

보내는 데이터를 보니 길이가 약 5000 ~6000 사이입니다. 받는쪽 데이터를 확인했는데

 

read 하였을때 막 1000?이런 길이 데이터도 들어오고 가끔 10000인 데이터도 들어옵니다. 통신관련 부분 어떻게 해야할지 모르겠어서 질문드립니다.

 

처음생각은 그냥 비트맵데이터만 실시간으로 계속 보내면 바로 bitmap 만들어서 화면에 뿌려줄수있을줄알았는데

 

클라이언트쪽 렉도엄청 심해지고 어떻게 해야할지모르겠습니다. 죄송하지만 질문드립니다

 

보통이런데이터를 통신상으로 보낼때 어떻게 해야할까요? 필요없거나 쪼개진거거나 딜레이되서

 

한번에 오는 데이터들은 어떻게 정리를해야하는지 모르겠습니다.
익명사용자 님이 2015년 8월 18일 질문

1개의 답변

0 추천
뭉쳐서 오는경우를 대비해서 stx, etx를 추가해서 파싱을 해야죠. 데이터의 처음과 끝에 특정 플래그를 지정해두고

데이터가 들어올때마다 파싱을 해야됩니다. 예를들어 데이터의 맨 처음은 0xab이고 끝은 0xcd 라고 하면

ab 어쩌구저쩌구 데이터.... cd 이런식으로 데이터를 만들어서 전송하고,

받는측에선 처음과 끝을 확인하여서 맞으면 데이터를 처리하고, 처음이 ab였는데 끝이 cd가 아니면 뭐 또 그에따라서 대응을

해야 합니다. 5천바이트짜리 데이터가 와야하는데 1만이 왔다. 그러면 시작플래그인 ab를 찾고 끝플래그인 cd를 찾아서

하나의 데이터를 파싱하고, 그다음 ab와 cd를 찾아서 파싱하고..

 

그러다보면 이제 나오는게 데이터 중간에 플래그와 동일한 ab나 cd가 있을때는 어떻게 하느냐?

이런거에 대비해 슬립인코딩이라던지.. 하는 기법들도 있습니다. 조금더 겹칠확률이 적게 플래그를 2바이트씩 쓴다던지..

소켓통신에서는 이런게 기본적으로 들어가줘야 합니다. 시작플래그 뒤에 헤더를 다는경우도 있죠. 데이터의 총 길이 라던지.. 메시지의 타입이라던지 하는,,,
아시리 (8,400 포인트) 님이 2015년 8월 18일 답변
아시리님의 말씀이 맞아요.
간단하게 이야게해서 100자 글짜를 보낸다고 가정했을때 먼저 10자보내고 다음에 50자 보내고 그담에 40자 보낼수 있는거죠. 이건 상황따라 다 달라요. 소킷 모니터링같은거 해보시면 아 저렇게 짤려서 나라오는구나 하실꺼예요. 완전 랜덤이라고 생각하시는게 맘편합니다. 그래서 아시리님의 말씀처럼 시작점과 끝을 알려주어야 하는데요. 이때나오는 것이 stx(start of text), etx(end of tex), head 같은것이지요. 요런건 소켓통신관련 자료 찾아보시면 많을 꺼예요.  키워드는 socket, protocal, tcp/ip 정도로 찾아보시면 도움이 되실꺼 같내요
...