현재 저는 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) {
}
}
}
-----------------데이터 받는 스레드----------
저 데이터를 받는 스레드에서 파일과 일반 메시지를 구별하여 각각 다른 행동을 하고 싶습니다.
어떻게 하면 될까요?