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

TCP/IP 송수신 문제가생겼습니다^^

0 추천

현재 디바이스 끼리 메시지 주고받기까지는 잘되었는데 처음에 둘이 TCP연결이 되면 한개는 서버가 되고 한개는 클라이언트가 되어서 주고 받습니다. 

A를 서버라하고 B를 클라이언트라고 할게요 ^^

근데 여기서 문제!! ㅠㅠ 가생겼습니다. 

메시지만 주고받을때는 잘됬거든요 이제 처음 연결할때 자신의 사진을 보여주는걸 하려고하는데 저는 B가 미리 설정해둔 사진파일을 A에게로 보내주는걸로 했습니다.

B에서 A로 메시지 넘겨줄때는 Json으로 넘겨줬습니다.

메시지 전달할때 는 이런식오르 넘겨줬습니다.

DataOutputStream output = new DataOutputStream(cSocket.getOutputStream());
jsonMain.put("jsontest", jArray);
output.writeUTF(jsonMain.toString());

받을때는

DataInputStream input = new DataInputStream(socket.getInputStream());
JSONObject json = new JSONObject(input.readUTF().toString());
JSONArray jArray = json.getJSONArray("jsontest");
json = jArray.getJSONObject(0);

이런식으로해서 받았구요.

 여기까지는 아주 잘됬습니다. 

OutputStream fClient_output = cSocket.getOutputStream();
while ((buff = in.read(buf, 0, 1024)) > 0) {
					dSendSize += buff;
					fClient_output.write(buf, 0, buff);
					fClient_output.flush();

					Log.d(tag, "[" + dFileSize + "]Send: " + dSendSize + "(" + buff + ")");

					buf = new byte[1025];
				}
				 fClient_output.close();

그림 파일을 B에서 A로 넘겨줄때 입니다 여기서 fClient_output.close()를 안하면 A에서는 계속 이것만 기다리고 close()를 하면 그림파일 다받고 이위에 input에서 에러가 생깁니다 ㅠㅠ

FileOutputStream fOutput = new FileOutputStream(f);
while ((buff = sSocket.getInputStream().read(buf, 0, 1024)) >= 0) {

									dRecvSize += buff;

									fOutput.write(buf, 0, buff);
									fOutput.flush();
									Log.d(tag, "RecvSize: " + dRecvSize);
								}
								fOutput.close();

이건 이제 A에서 받을때입니다.

 

로그에는 이렇게 찍히구요 ㅠㅠ Json으로 메시지 주는거랑 분할 해서 해야하나요? 해처나갈 방법을 모르겠습니다 ㅠㅠ

윤슈슈슈 (3,030 포인트) 님이 2015년 12월 29일 질문

1개의 답변

0 추천
아마 스레드로 구현을 하셔서 스트림을 재사용하시는 형태로 하신것 같은데요.. 말씀하신데로 클라이언트에서 2개의 스레드로 구분해서 처리하시는 게 좋을 듯 합니다.

클라이언트에서 json을 가져오는 asynctask, 그 결과로 이미지를 가져오는 asynctask로 구분해서 처리하시면 문제가 되지 않을 것 같습니다.
mcsong (44,040 포인트) 님이 2015년 12월 30일 답변
...