그리고 패킷 제작은 사용하시는 분 마음대로 규격을 정하셔도 괜찮을거 같아요. 저는 모든 정보를 문자로 변환한 후 알파벳으로 구분했습니다.
"a1.23b2.34c3.45z" 이렇게요. 그러면 전송받은 측에서 a, b사이의 문자("1.23")을 빼 낸 다음에 숫자(1.23)로 변환하는 방법을 사용했습니다.
패킷을 송신 했다면, 수신을 해야할텐데 코드 작성 전에 문득 이런 생각이 들더군요
'한 패킷 전송 속도와 안드로이드 반복문의 속도가 다르면 패킷이 잘릴까?' '패킷이 잘린다면 다음번에 수신된 나머지 패킷과 연결할 순 없을까?'
그래서 고민하다 링 버퍼를 만들었습니다. 패킷보다 긴(2배이상) 충분한 저장공간(배열)을 만들어 놓고 수신한 바이트들을 배열 안에 순서대로
차곡차곡 쌓아 두는거죠. 차례대로 쌓여있다면 그 배열을 검사하면서 내가 정한 패킷에 맞는 데이터가 있다면 빼서 사용하는겁니다.
밑에 소스 첨부 하겠습니다~ 어떤 함수를 사용했는지 참고하시고 자신만의 통신을 구현해 보시길~
private String catchNumber(String start, String end, String str, int state) { // a와 z의 위치를 저장 int pos_a = str.indexOf(start); int pos_z = str.indexOf(end);
if(pos_a != -1 && pos_z != -1) { if(pos_a >= pos_z) { // z가 a보다 앞에 있을 경우 str = str.substring(pos_a, str.length()); // a바로 앞까지 제거
// a와 z의 위치를 저장 pos_a = str.indexOf(start); pos_z = str.indexOf(end); }