返回信息流求问一个问题
现在需实现一个功能
android通过socket连续发送四部分内容:一个整型变量和三个文件到服务器端(c++实现,通过socket接收)
因为存在大小字节序的问题,所以对于基本数据类型的传输,采用转换为字节数组后,在客户端改变字节序再发送的方式
发送文件分成三个字节数组进行发送:先发送文件名的字节数组,再发送文件大小的字节数组,最后发送文件内容的字节数组
android端发送的字节数组通过log检查过没有问题
c++接收字节数组代码如下:
int name_size = recv(client_sockfd, buffer, MAX_BUFFER, 0);
int len_size = recv(client_sockfd, buffer, MAX_BUFFER, 0);
int data_size = recv(client_sockfd, buffer, MAX_BUFFER, 0);
举例,android发送的某个文件,其文件名,文件大小,文件内容的字节数组长度分别为:10,8,400(个字节)
现在遇到的问题是:
服务器端接收文件时能够完全接收到发送过来的所有字节,但是无法区分这些内容
比如可能name_size = 418(10+8+400) , len_size = 0, data_size = 0
也可能 name_size = 18(10+8) , len_size = 400, data_size=0
麻烦问一下这个问题该怎么解决~
这是一条镜像帖。来源:北邮人论坛 / java / #48081同步于 2016/2/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java通过socket发送多个文件,c++接收
andand16
2016/2/29镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
文件名用N个字节,文件大小用S个字节,文件内容使用的肯定是[文件大小]个字节。
一串字节数组过来后,前N个解读成文件名字符串,接着S个字节读成整型,表示文件大小的,然后接下来[文件大小]个字节就是文件内容了。
前面的N和S是固定的常数。
恩恩,不好意思才看到
就是这么处理的,已经实现了~
【 在 sg8888 的大作中提到: 】
: 文件名用N个字节,文件大小用S个字节,文件内容使用的肯定是[文件大小]个字节。
: 一串字节数组过来后,前N个解读成文件名字符串,接着S个字节读成整型,表示文件大小的,然后接下来[文件大小]个字节就是文件内容了。
: 前面的N和S是固定的常数。