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

TCP를이용한 서버와의 통신에서 일반 string 문자와 파일 구별법

0 추천
현재 저는 tcp 소켓을이용하여 C#서버와 통신을 하는 어플리케이션을 개발하고있습니다.

하지만 지금 문제가 생긴게 tcp 소켓으로 메시지를 주고 받는것에는 성공을 했는데

여기에 파일 수신기능도 추가를 하려고 하니 문제가 됩니다.

원래 스레드 하나를 또 돌려서 거기서 채팅하듯이 메시지를 주고받기위해 BufferReader에 소켓의 InputStream을 주고 이걸로 메시지를 받아오고있었는데, 이제 파일도 수신하려고 하니

파일은 원래대로 받을경우 그게 String으로 뽑아져서 원래 제기능을 못하기때문에

서버에서 보낸 데이터가 file인지 아니면 일반 그냥 string인지 이걸 구별하는 방법이 있어야 할것같습니다.

서버에서 보낸 데이터가 파일인지 뭔지 구별할수있는 방법이 없을까요?

현재 저의 소스코드 올립니다.

private class connectTask extends AsyncTask<String, Void , Socket> {
        Handler handler = new Handler();
        @Override
        protected Socket doInBackground(String... params) {
            try {
                cSocket = new Socket();
                cSocket.connect(new InetSocketAddress(server, port), 1000);
                streamOut = new PrintWriter(cSocket.getOutputStream(), true);
                streamIn = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
                o_Stream=cSocket.getOutputStream();
            } catch (Exception e){
                makeSnackBar("서버를 찾을수 없습니다.");
                Log.e("failed", "cannot connect");
                cSocket=null;
                tcpConnect=false;
                return null;
            }
            cThread = new chatThread();
            cThread.start();

            tcpConnect=true;
            makeSnackBar("서버에 접속했습니다.");
            return null;
        }
    }

-------------------------소켓 생성------------

class chatThread extends Thread {
        private boolean flag = false; // 스레드 유지(종료)용 플래그
        public void run() {
            try {
                while (!flag) { // 플래그가 false일경우에 루프
                    String msgs;
                    Message msg = new Message();
                    msgs = streamIn.readLine();  // 서버에서 올 메세지를 기다린다.
                    msg.obj = msgs;
                    mHandler.sendMessage(msg); // 핸들러로 메세지 전송
                }
            }catch(Exception e) {
            }
        }
    }

-----------------데이터 받는 스레드----------

 

저 데이터를 받는 스레드에서 파일과 일반 메시지를 구별하여 각각 다른 행동을 하고 싶습니다.

어떻게 하면 될까요?
안드잘하고싶 (3,310 포인트) 님이 2016년 4월 21일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...