안드로이드 개발 질문/답변
(글 수 45,052)
소켓을 이용하고 있습니다. 그런데 잘 안 되네요.
지금 촬영 후에 영상을 PC로 보내는 것에는 성공을 했는데,
이제는 용량은 같은데 아무래도 앞 부분(헤더?)이 제대로 들어오지 않는 것 같습니다...
어디가 문제일까요..?
// 전송 하는 Android 쪽 코드
try { DataInputStream dis = new DataInputStream(new FileInputStream(new File(fileName))); DataOutputStream dos = new DataOutputStream(sock.getOutputStream()); Delay.sleep(5000); handler1.sendMessage(handler1.obtainMessage()); int bytesAvailable = dis.available(); int maxBufferSize = 1024; int bufferSize = Math.min(bytesAvailable, maxBufferSize); byte[] buffer = new byte[1024]; int bytesRead = dis.read(buffer, 0, bufferSize); while(bytesRead > 0 || i == 1) { if(bytesRead <= 0) { while(bytesRead <= 0) { Delay.sleep(750); bytesAvailable = dis.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[1024]; bytesRead = dis.read(buffer, 0, bufferSize); } } dos.write(buffer, 0, bytesRead); dos.flush(); bytesAvailable = dis.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[1024]; bytesRead = dis.read(buffer, 0, bufferSize); } dos.close(); } finally { sock.close(); handler1.sendMessage(handler1.obtainMessage()); } } catch (Exception e) { handler2.sendMessage(handler2.obtainMessage()); }
// 전송 받는 PC 쪽 코드
while(true) { Socket sock = serverSocket.accept(); System.out.println("수신중...."); try{ String str = "video.3gp"; System.out.println("수신중인 파일 이름 : " + str); File f = new File("d:\\", str); FileOutputStream fStream = new FileOutputStream(f); // File file;으로부터 OPT스트림을 가져옴 BufferedInputStream biStream = new BufferedInputStream(sock.getInputStream()); // URLConnection 으로부터 IPT스트림을 가져옴
byte[] buffer = new byte[1024]; int bytesAvailable = biStream.available(); int maxBufferSize = 1024; int bufferSize = Math.min(bytesAvailable, maxBufferSize); int bytesRead = 0; while(true) { if((bytesRead = biStream.read(buffer)) <= 0) { Delay.sleep(1500); if((bytesRead = biStream.read(buffer)) <= 0) break; bytesAvailable = biStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); } fStream.write(buffer, 0, bytesRead); bytesAvailable = biStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = 0; } fStream.close(); biStream.close(); System.out.println(str+" 수신완료"); } catch(Exception e){ System.out.println("서버 에러!!"); e.printStackTrace(); } finally{ sock.close(); } }
(공지사항을 다 읽었음)