네 감사합니다. 수정하였고요.
근데 하나더 질문이있는데...
Delphi에서 file을 분할해서 보내고싶은데 어떻게보내는지 알고싶습니다.
ㅠ
눈팅이 님이 쓰신 글 :
: 일단 실제 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());
: : =========================================================================
|