小弟在做课题时用到了MFC结合opencv,并需要把现场的摄像图像以及一些现场字符串信息发送至手机端;字符串因为有不同的类型,所以我自己在发送数据前加了标记传递,并且已经完成;因为图片的数据类型是mat,Iplimage类型的,不知道如何通过send函数传递了,而且也需要加上标记,所以希望知道方法的大神给些建议,求点函数求点代码!谢谢谢谢!
char buffer[26528];
fread(buffer, 1, sizeof(fp), fp);
printf("%s",buffer);
//如果是这么大的数组,这里应延时,不然数据还没有读完就Send的。。。读到的二进制里面不是字符串。。可以前数组100个字节 (%x)
以文件的形式传递,把文件转换成字节数组,在接收端接收字节数组,再组装就行了
应该send和Recv 之后看看数据是否完全一致。。。
不知道过程中哪步有问题,我把服务端的一些代码和客户端的代码贴上来,各位大大看一下~
C++Server
FILE fp;
fp = fopen("F://abcd.png", "ab");
long size;
size = filesize(fp);
printf("%d\n",size);
char buffer[26528];
fread(buffer, 1, sizeof(fp), fp);
printf("%s",buffer);
send(connectSock, (char)buffer, strlen(buffer), 0);
fclose(fp);
Java Client
{}mBufferedReaderClient.read(buffer);
byte[] buffer2=getBytes(buffer);
recvMap=getBitmapFromByte(buffer2);
msg.what=4;
if(msg.what==4){
pcImage.setImageBitmap(recvMap);
}//省略了一些代码 重点代码都在这了
public Bitmap getBitmapFromByte(byte[] temp){
if(temp != null){
Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);
return bitmap;
}else{
return null;
}
}
private byte[] getBytes (char[] chars) {
Charset cs = Charset.forName ("UTF-8");
CharBuffer cb = CharBuffer.allocate (chars.length);
cb.put (chars);
cb.flip ();
ByteBuffer bb = cs.encode (cb);
return bb.array();
}
FILE *fp = fopen("00.png","rb");
char czBuf[1024] = {0};
fread(czBuf,1,sizeof(czBuf),fp);
for (int i = 0;i < 1024;i ++)
{
if (((i % 10) == 0) && i != 0)
{
printf("\r\n");
}
printf("%02x ",(BYTE)czBuf[i]);
}
fclose(fp);