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

Socket통신시 BufferReader관련

0 추천

Socket 통신을 하는데 Server(C#)에서 보낸 값을 Client(안드로이드)에서 처음값만 읽고 그 뒤로는 읽지를 못하더라구요.

BufferReader를 초기화 해줘야하는걸까요?

while (true) {
    // 입력 스트림에서 메시지를 읽는다
    mRecvData = mReader.readLine();
    // 이벤트 핸들러에 이벤트를 전달
    mReceiver.sendEmptyMessage(0);
    System.out.println(mRecvData);
    mEditReceive.setText(mRecvData);
   }
Handler mReceiver = new Handler() {
    public void handleMessage(Message msg) {
        receive.setText(mRecvData);
    }
};
도짱 님이 2016년 9월 21일 질문

1개의 답변

0 추천
p2p통신을 할때 BufferedReader를 사용하는 것은 적절하지 못하다고 생각합니다.

readLine 함수가 리턴해주는 값이 string 값인데 p2p간의 플랫폼이 다를 경우 인코딩에 따라 영향을 받을 수 있다고 생각이 들거든요.

제 생각에는 이와 관련된 문제일것 같은데 readLine 함수 동작이 말그대로 입력 버퍼에 뉴라인이 들어가 있을 경우 이를 구분자로 하여 리턴해주는데 서버에서 보낸 데이터 마지막에 뉴라인도 없고 스트림을 close 시키지도 않는다면 readLine 함수가 값을 리턴해 주지 못할거라는 생각이 듭니다.

서버에서 실제로 보낸값과 클라이언트에서 실제로 받은값도 명시하여 주시면 구체적인 답변 드리는데 도움이 될것 같습니다.
Development Guy (70,570 포인트) 님이 2016년 9월 21일 답변
클라이언트에서 A,1 이라고 보내면 서버에서 A가오면 1을 클라이언트로 B가 오면 2를 클라이언트로 보내게끔 되있습니다.
현재 B를 보내고 2가 들어온것을 확인한 후 A를 보내면 1이들어와야하는데 들어오지를 않더군요.
클라이언트에서 B를 보내는것은 확인했습니다.
보내는 쪽에서 string 값 맨 뒤에 "\n" 또는 "\r\n"을 넣어서 보내보세요.
...