안녕하세요.
제가 만들고 있는 앱 기능 중에 하나로 파일 전송이 있습니다. 같은 네트워크에 있는 서버와 TCP 통신으로 파일 데이터를 넘겨주는데, 문제는 가끔가다 파일 전송이 뚝 끊기는 경우가 있습니다. 단순히 네트워크 연결이 끊긴 것과는 다르게 TCP 연결이 완료되고 전송할 파일의 정보도 넘어간 다음에 파일의 raw 데이터가 전송될 시간에 몇 KB를 전송하다가 전송이 멈춤니다. 그런데 이 문제가 항시 있는 것이 아니라 잘 전송되는 때도 있다는 것입니다. 그래서 대체 어디가, 어떻게 문제인지 찾을 수가 없어서 질문드립니다.
- 클라이언트 부분 (코드의 핵심 부분만 간략해서 올렸습니다.)
// 소켓 설정 및 연결 요청
socket.setSoTimeout(TIMEOUT);
socket.setSoLinger(true, TIMEOUT);
socket.connect(socketAddress, TIMEOUT);
// 파일 데이터 전송
FileInputStream fileInputStream = new FileInputStream(file);
while ((readCount = fileInputStream.read(buffer, 0, buffer.length)) > 0) {
socket.getOutputStream().write(buffer, 0, readCount);
}
소켓 연결하기 전에 설정과 연결부분 그리고 실제 문제가 생기는 파일 데이터를 전송하는 부분만 올렸습니다.
파일을 전송하는 로직은 파일 데이터를 버퍼에 읽어와서 그 버퍼를 다시 소켓 스트림으로 전송하는 것입니다.
- 안드로이드 스튜디오 모니터 네트워크 부분

네트워크 모니터를 보면 조금 전송하다가 전송이 중단 됩니다. 그러나 timeout이나 예외도 없이 멈춰있습니다.