C부분
p=fopen("test.jpg","rb");
if(fp==NULL)
return 0;
while(1)
{
printf("11 ");
file_len=fread(buf,sizeof(char),30,fp);
send(hClntSock,buf,file_len,0);
if(feof(fp))
break;
}
이렇게 해서 안드로이드 파일 보냅니다.
안드로이드에서 받는 부분입니다.
void Receive()
{
int i=0;
try {
BufferedInputStream bis = new BufferedInputStream( sock.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(new File("/mnt/sdcard/"+"ee.jpg")));
int size=0;
byte b[] = new byte[30];
int body=0;
while((size=bis.read(b))!=-1)
{
bos.write(b,0,size);
bos.flush();
}
bos.close();
bis.close();
sock.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
이렇게해서 이미지를 송신을 하면 안드로이드에서 보면 검은 화면만 나옵니다.
그래서 usb하고 연결해서 컴퓨터로 보면 제대로 나옵니다.
그래서 용량을 확인해봤더니 원본이 75.7kb이고 수신받은 파일이 75.4kb 이거나 75kb 이렇게 유동적으로 바뀝니다.
그래서 다른 wav파일을 C에서 보내고 받아서 안드로이드에서 재생을 해봤는데 재생이 됩니다. 근데 용량이 원본은 287kb이고 받은 용량은
286인데 제대로 재생이 됩니다.
왜 이미지파일은 제대로 보이지 안을까요??
파일을 보낼 때 정확한 크기를 먼저 보내고 안드로이드에서 받을 때도 파일 크기만큼만 받도록 처리하는 게 좋습니다.
C소스에서도 buf를 while문 돌릴 때 memset으로 초기화시키고 데이터를 읽는게 좋습니다.
안드로이드에서 받을 때도 4byte 먼저 받아서 뒤에 올 파일 크기를 먼저 확인하고 크기만큼만 받도록 바꾸는 게 좋겠네요