이전 포스트에서 제공하던 여러개 전송 하던 방법은 buf 를 생성하여 담아 보내면 속도는 개선 되었지만
파일의 EOF를 서버측( 반대 경우도 포함)에서 제대로 못 받아 주는 현상으로 전송에 문제가 생겼었습니다
해결방법으로 여러 방법이 있지만 파일 하나 보낼 때 socket을 열고 닫는 방법으로 우선 해결해 보았습니다.
JAVA Server ( 파일 보내는 곳)
class fileServer extends Thread { //소켓 연결할 Thread 생성합니다.
public void run() {
fileportNumber = 11002; fileServerSocket=new ServerSocket(fileportNumber); try { File[] files = new File(path).listFiles(); // path경로에있는 파일 모두 읽어들임니다. try { for(i=0;i<files.length;i++){ //파일 개수 만큼 Socket 돕니다. fileSocket = fileServerSocket.accept();
BufferedOutputStream bos = new BufferedOutputStream( fileSocket.getOutputStream()); DataOutputStream dos = new DataOutputStream(bos); System.out.println("파일개수?" +files[i].getName()+files[i].length()); dos.writeUTF(files[i].getName()); //파일 이름 받아옵니다.
FileInputStream fis = new FileInputStream(files[i]); BufferedInputStream bis = new BufferedInputStream(fis); byte[] buf = new byte[4096]; //buf 생성합니다. int theByte = 0; while ((theByte = bis.read(buf)) != -1) // BufferedInputStream으로 // 클라이언트에 보내기 위해 write합니다. { bos.write(buf,0,theByte); } System.out.println("마지막값"+theByte); System.out.println("송신완료");
dos.close(); bos.close(); fileSocket.close(); //socket 닫아줌 } fileServerSocket.close(); //파일을 다 전송했으면 ServerSocket 닫아줌니다.
} catch (Exception e) { e.printStackTrace(); } } catch (Exception ex) { ex.printStackTrace(); } }} |
Android ( 파일 받는 곳)
class ConnectThread extends Thread {
|
안드로이드에서 Server로 데이터 전송하는 부분은 이 코드 반대로 작성하시면 됩니다.
ServerSocket(Java Server), Socket (안드로이드) 은 그대로 유지, While문을 fileSocket = fileServerSocket.accept(); 가 돌도록 하면 완료합니다.
'프로그래밍 > android' 카테고리의 다른 글
안드로이드 JNI 사용하기2(JNI 파일,코드작성) (0) | 2017.01.31 |
---|---|
안드로이드 JNI 사용하기(NDK 설치 및 JNI 환경설정) (0) | 2017.01.31 |
Android monkey test 활용하기(adb명령어) (0) | 2017.01.20 |
Android 외부 저장소 관련 PERMISSION 설정 (0) | 2017.01.12 |
안드로이드, java서버 socket 통신 파일 전송 (4) | 2017.01.05 |
안드로이드 오버레이 권한 설정창 이동 (0) | 2016.12.28 |
안드로이드 값 저장 SharedPreferences (2) | 2016.12.27 |
마우스,키보드 어플 추천 (0) | 2016.12.26 |