일단 실제 FileSocket에서 수신이 안되는것이 확실한가요?
자바소스를 봤을때는 특정부분에 예외가 발생하면 발생하면 수신이 제대로 되었는지조차 확인이 안될것같은데요..?
일단 아래와같이 처리를 해주셔야 예외가 발생했을때 무엇때문인지라도 확인이 가능하겠지요?
변수 선언 또는 생성코드들...
try {
자바코드들...
} catch(Exception e) {
Log.i(e.ToString());
} finally {
각종해제코드들...
}
그리고 String fName = dis.readUTF(); 이구문이 파일생성시 파일명을 넣어주는부분인것같은데
readUTF() 메소드를 통해서 해당변수에 파일이름이 아닌 데이터자체를 넣고있네요...
스트림의 내용에따라 파일명규칙위반 문자가들어 오면 File f = new File(fName); 위치에서 예외가 발생하겠죠?
참고로 안드로이드에서 파일을 저장시 기본적으로 앱에서만 사용할 수 있는 내부스토리지에 저장이됩니다. 혹시
위 데이터자체 내용이 파일의 이름을 나타내는것이었고, 그경로가 외부스토리지 경로라면 manifest에서 설정을 추가해줘야합니다.
※ 아, 그리고 델파이쪽 코드도 FileStream.Free; 구문이 예외상황이 없으면 해제되는 일은 없겠네요..
Jinzeros 님이 쓰신 글 :
: 내용은 제목과 같이 델파이에서 보낸파일을 안드로이드에서 수신하는 프로그램입니다.
:
: 안드로이드 ... 즉, 자바는 처음하는데... 잘모르겟습니다;;
:
: 고수님들 부탁드립니다. ㅠ 참고로 Client에서 Server에 접속은 됩니다. 메시지 송수신은 잘됩니다.
:
: 파일이랑 스트링 분리하라고 인터넷에서 본것같아 2개를 분리해뒀습니다.
:
: File 송수신 FileSocket 수신이 안됨.(연결은 되어있음)
:
: 메시지 송수신 MsgSocket 정상적으로 잘됨.(아래 소스에는 없습니다.)
:
: # delphi 7 ServerSocket
: =========================================================================
: sFileName := 'c:\sample.bmp';
: try
: // FileStream := TFileStream.Create(sFileName, fmOpenRead);
: FileStream := TFileStream.Create(sFileName, fmOpenRead or fmShareDenyWrite);
:
: FileStream.Position := 0;
: // Add the length of the data, so the client will know how much data to expect.
: // Append #0 so it can determine where the size info stops.
: for i:= 0 to IdServer.Socket.ActiveConnections - 1 do
: begin
: IdServer.Socket.Connections[i].SendText(IntToStr(FileStream.Size) );
: IdServer.Socket.Connections[i].SendStream(FileStream);
: end;
: except
: FileStream.Free;
: end;
: =========================================================================
:
: # Android ClientSocket
: =========================================================================
: DataInputStream dis = new DataInputStream(fileRecevSocket.getInputStream());
: Log.i("tree","********************");
:
:
: Log.i("tree","***AAAAAAAAAAAAAAAA***");
: String fName = dis.readUTF();
: Log.i("tree","파일명 :" + fName + "을 전송 받았습니다.");
: fName = fName.replaceAll("a", "b");
: // 파일을 생성하고 파일에 대한 출력 스트림 생성
: File f = new File(fName);
: fos = new FileOutputStream(f);
: bos = new BufferedOutputStream(fos);
: Log.i("tree","파일명 :" + fName + "파일을 생성하였습니다.");
:
: //바이트 데이터를 전송받으면서 기록
: int len;
: int size = 4096;
: byte[] data = new byte[size];
: while ((len = dis.read(data)) != -1)
: {
: bos.write(data, 0, len);
: }
:
: bos.flush();
: bos.close();
: fos.close();
: dis.close();
: Log.i("tree","파일 수신 작업을 완료하였씁니다.");
: Log.i("tree","받은 파일의 "
: + ""
: + "사이즈 : " + f.length());
: =========================================================================
|