69,373
社区成员
发帖
与我相关
我的任务
分享
//传输数据结构体
typedef struct ResponeBody{
int packindex;//4 byte
char type;//2 byte
char status;//2 byte
int datalen;//4 byte
int datatotal;//4 byte
char s_arg[24];//24 byte
char data[SIZE_DATA];
}ResponeBody;
//发送端
while((num = read(fd, resp.data, SIZE_DATA)) > 0)
{
resp.type = getData;
resp.status = 1;
resp.datalen = num;
res = my_write(socket, &resp, SIZE_RESP);
if(res < 0){
return -1;
}
memset(&resp, 0, SIZE_RESP);
}
close(fd);
//读取数据
int ret = -1;
while(1){
num = read(socket, &resp, SIZE_RESP);
if(num <= 0 || len_recv >= datatotal){
printf("get success\n");
ret = 0;
break;
}
if(0 == resp.status || resp.type != getData){
ret = -1;
break;
}
write(fd, resp.data, resp.datalen);
len_recv += num-SIZE_INFO;
printf("get ----[%2.2f%%]----\n", len_recv/(double)datatotal * 100);
memset(&resp, 0, SIZE_RESP);
}
[/quote]
怀疑是读取端没有即使将数据接收,导致数据包丢失。
//传输数据结构体
typedef struct ResponeBody{
int packindex;//4 byte
char type;//2 byte
char status;//2 byte
int datalen;//4 byte
int datatotal;//4 byte
char s_arg[24];//24 byte
char data[SIZE_DATA];
}ResponeBody;
//发送端
while((num = read(fd, resp.data, SIZE_DATA)) > 0)
{
resp.type = getData;
resp.status = 1;
resp.datalen = num;
res = my_write(socket, &resp, SIZE_RESP);
if(res < 0){
return -1;
}
memset(&resp, 0, SIZE_RESP);
}
close(fd);
//读取数据
int ret = -1;
while(1){
num = read(socket, &resp, SIZE_RESP);
if(num <= 0 || len_recv >= datatotal){
printf("get success\n");
ret = 0;
break;
}
if(0 == resp.status || resp.type != getData){
ret = -1;
break;
}
write(fd, resp.data, resp.datalen);
len_recv += num-SIZE_INFO;
printf("get ----[%2.2f%%]----\n", len_recv/(double)datatotal * 100);
memset(&resp, 0, SIZE_RESP);
}