jpeg
我正在尝试通过套接字和 PC 部分从我的 android 手机发送图像,获取发送的数据并将其存储在jpg
文件中。
我很确定我正确配置了套接字,因为我可以将数据(二进制文件)从 PC 下载到 android 并正确保存。
我还可以读取从 android 发送到 PC 的流。数据包长度和标头信息正是我所期望的。
问题在于读取图像数据。我的图像数据大小相同,但是当我将其保存到.jpg
文件时,它已损坏并且我无法查看它。
这是我的 Android 代码,它在发送标头信息后尝试发送图像文件:
try{
//packagesize is header information which is sent in advance
index.putInt(packagesize);
byte c[]= {index.get(3),index.get(2),index.get(1),index.get(0)};
InputStream jpgimage = new FileInputStream(fileimage);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
int writeBytes = 0,len = 0;
byte buffer[] = new byte[1024];
while((len = jpgimage.read(buffer,0,buffer.length))!=-1)
{
writeBytes+=len;
dataOutputStream.write(buffer,0,len);
}
dataOutputStream.flush();
jpgimage.close();
dataInputStream.close();
dataOutputStream.close();
...
...
...
}
catch statements here
这是PC部分的接收代码:
// after reading header information I try to read image data
char *buff = malloc(sizeof(char) * jpeg_length);
unsigned int byteCount = 0;
unsigned int byteCount = 0;
do
{
int ret = recv(socket, buff+readBytes, jpeg_length-readBytes, 0);
if (ret <= 0)
{
fprintf(stderr,"Error receiving jpeg file.\n");
fclose( output );
return 106;
}
readBytes += ret;
fwrite(buff, sizeof(char), readBytes, output);
}
while (readBytes < jpeg_length);
fclose( output );
我还必须提到,当我使用纯 PC 客户端应用程序发送图像数据时,接收部分工作正常C++
。
是否知道问题是什么以及为什么我从 android 设备发送损坏的图像?
欣赏它。
编辑 我将此添加到android应用程序以测试发送字节是否可以形成良好的图像?我保存了图像,一切正常。
int writeBytes = 0,len = 0;
byte buffer[] = new byte[1024];
// Here I save all sending bytes to an image called test.jpg
String path = "sdcard/download/images/test.jpg";
FileOutputStream stream = new FileOutputStream(path);
while((len = jpgimage.read(buffer,0,buffer.length))!=-1)
{
writeBytes+=len;
stream.write(buffer);
dataOutputStream.write(buffer,0,len);
dataOutputStream.flush();
}
stream.flush();
dataOutputStream.flush();
jpgimage.close();
dataInputStream.close();
dataOutputStream.close();