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

자바서버 - 안드로이드 통신..

0 추천
클라이언트에서 텍스트 입력하고 버튼누르면 자바서버로 전송되고, 클라이언트쪽엔 확인메세지가 뜨는식인데요.

최초 1회는 전송이 되는데 다음부턴 전송이 안되네요.. 어떻게 해결해야 할까요.

서버 소스첨부해요. 부탁드려요~

public void run() {

        // TODO Auto-generated method stub

        try {

            System.out.println("S: Connecting...");

            ServerSocket serverSocket = new ServerSocket(ServerPort);

 

            while (true) {

                Socket client = serverSocket.accept();

                System.out.println("S: Receiving...");

 

                try {

                    BufferedReader in = new BufferedReader(

                    new InputStreamReader(client.getInputStream()));

                    String str = in.readLine();

                    System.out.println("S: Received: '" + str + "'");

                    PrintWriter out = new PrintWriter(new BufferedWriter(

                    new OutputStreamWriter(client.getOutputStream())),true);

                    out.println("Server Received " + str);

                } catch (Exception e) {

                    System.out.println("S: Error");

                    e.printStackTrace();

                } finally {

                    client.close();

                    System.out.println("S: Done.");

                }

            }

        } catch (Exception e) {

            System.out.println("S: Error");

            e.printStackTrace();

        }

    }
익명사용자 님이 2013년 5월 21일 질문

1개의 답변

0 추천
현재구조가 루프문안에서 accept 하고 read() 한번하고 소켓 close() 를 반복해서 하도록 되어 있는데 그러시면 안되고,

accept  된 소켓을 가지고 루프문을 돌려서 계속 read() write() 반복적으로 하는 구조로 만드셔야하며, close()는 통신을 완전히 종료할때 사용하셔야합니다..

다중클라이언트를 고려하지 않는 1:1 통신만을 대상으로한 슈도코드로 설명드리면 아래와 같습니다.

accept();

while(){

     read() & write()

}

close();
익명사용자 님이 2013년 5월 21일 답변
아 감사해요!.
그런데 client.close();를 while문밖에다 넣으니 자꾸 에러가 나네요;;;
...