1 Star 0 Fork 0

xiaodingding / mmftp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
file_transfer_functions.c 1.65 KB
一键复制 编辑 原始数据 按行查看 历史
#include <file_transfer_functions.h>
static size_t size_packet = sizeof(struct packet);
void send_EOT(struct packet* hp, struct packet* data, int sfd)
{
int x;
hp->type = EOT;
data = htonp(hp);
if((x = send(sfd, data, size_packet, 0)) != size_packet)
er("send()", x);
}
void send_TERM(struct packet* hp, struct packet* data, int sfd)
{
int x;
hp->type = TERM;
data = htonp(hp);
if((x = send(sfd, data, size_packet, 0)) != size_packet)
er("send()", x);
}
void send_file(struct packet* hp, struct packet* data, int sfd, FILE* f)
{
int x;
int i = 0, j = 0;
while(!feof(f))
{
memset(hp->buffer, '\0', sizeof(char) * LENBUFFER);
hp->datalen = fread(hp->buffer, 1, LENBUFFER - 1, f);
i += hp->datalen;
//printpacket(hp, HP);
data = htonp(hp);
if((x = send(sfd, data, size_packet, 0)) != size_packet)
er("send()", x);
j++;
}
fprintf(stderr, "\t%d byte(s) read.\n", i);
fprintf(stderr, "\t%d data packet(s) sent.\n", j);
fflush(stderr);
}
void receive_file(struct packet* hp, struct packet* data, int sfd, FILE* f)
{
int x;
int i = 0, j = 0;
if((x = recv(sfd, data, size_packet, 0)) <= 0)
er("recv()", x);
j++;
hp = ntohp(data);
//printpacket(hp, HP);
while(hp->type == DATA)
{
i += fwrite(hp->buffer, 1, hp->datalen, f);
if((x = recv(sfd, data, size_packet, 0)) <= 0)
er("recv()", x);
j++;
hp = ntohp(data);
//printpacket(hp, HP);
}
fprintf(stderr, "\t%d data packet(s) received.\n", --j); // j decremented because the last packet is EOT.
fprintf(stderr, "\t%d byte(s) written.\n", i);
if(hp->type == EOT)
return;
else
{
fprintf(stderr, "Error occured while downloading remote file.\n");
exit(2);
}
fflush(stderr);
}
1
https://gitee.com/xiaodingding/mmftp.git
git@gitee.com:xiaodingding/mmftp.git
xiaodingding
mmftp
mmftp
master

搜索帮助