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

[소켓통신] 서버 -> 클라이언트(안드로이드) 문자열 전송 질문입니다 [closed]

0 추천
 m_in_stream = m_client_soket.getInputStream(); 
    //1byte씩 read
  r_size =(byte) m_in_stream.read();

  r_message_id = (byte)m_in_stream.read();

  String readdata = String.format("size : %d, id : %d", (int)r_size,(int)r_message_id); 
// 위 두 값은 숫자 정보(message size, message id)이고,
// 정확하게 출력됩니다.//...
   
  data = new byte[(int)r_size+1];
  for(int i=0;i<(int)r_size;i++){
  data[i/*(int)r_size-i-1*/] = (byte) m_in_stream.read();
  Log.d("<Comm-read>","reading.....");
  }
  data[(int)r_size] = '\0';
  r_data = data;
  Log.d("<SUBJECT>",r_data.toString()); 

위 코드는 클라이언트(안드로이드) 중에서도 메시지 수신부분만 자른부분입니다

제일 마지막 라인에서... 로그켓에 로그를 찍어보면. 스크린샷에 보이듯 전혀 상관없는 문자열이 나오네요.

실험적으로 전송한 문자열은 fortune이라는 문자열입니다.

msg size / msg id / msg body 의 형태로 하나의 패킷을 구성하여 전송해봤는데.

메시지아이디 / 메시지 크기 같은 integer 벨류는 문제없이 받아서 출력까지 성공했습니다.

그런데 msgbody에 실리게되는 fortune 문자열은  엉뚱한 문자조합으로 출력되네요.

(참고로 반대로 클라이언트에서 서버쪽으로 보내는 문자열은 정상적으로 잘 출력되고있습니다)

 

질문을 종료한 이유: 해결했습니다. 이유는 모르겠습니다. 전송할때 char타입을 int타입으로 형 변환하니까 정상적으로 문자열이 수신되네요 ...
익명사용자 님이 2014년 8월 2일 질문
2014년 8월 3일 closed

1개의 답변

0 추천
byte 배열에 그냥 toString을 호출하면 의미없는 문자열이 나옵니다.

String  생성자를 이용해서 제대로 변환하세요.
익명사용자 님이 2014년 8월 3일 답변
new String(r_data) ; 이런 방법으로 logcat에 찍어봐도 비정상적인 문자들이 뜹니다. "abcdefg" 7개 알파벳을 전송해보니.
(아스키코드로는 97,98,99.... (int))
클라이언트쪽에선 확장아스키코드 범위를 벗어난 값이 나오네요.
"111111....11001101" 각각의 문자가 이런 바이너리값으로 나타나는데... 7개 알파벳이 모두 같은 값이네요?
...