【发布时间】:2022-12-07 02:05:13
【问题描述】:
我尝试通过 TCP ipv4 连接套接字传输大约 100MB 的数据大小。
我在发送之前计算客户端中的 CheckSum 以查看校验和是多少。
将数据文件发送到服务器并且服务器将其写入新文件后,我再次计算校验和,我可以看到不同之处。
我认为可能与我的发送和接收功能有关。
CLIENT 中使用的 Sender 函数:
void send_file(FILE *fp, int sockfd) {
int n;
char data[SIZE] = {0};
while (fgets(data, SIZE, fp) != NULL) {
if (send(sockfd, data, sizeof(data), 0) == -1) {
perror("[-]Error in sending file.");
exit(1);
}
bzero(data, SIZE);
}
}
Writer函数在SERVER中的使用:
void write_file(int sockfd, char *filename) {
int n;
FILE *fp;
//char *filename = "new_data.txt";
char buffer[SIZE];
fp = fopen(filename, "w");
while (1) {
n = recv(sockfd, buffer, SIZE, 0);
if (n <= 0) {
break;
return;
}
fprintf(fp, "%s", buffer);
bzero(buffer, SIZE);
}
}
【问题讨论】:
-
您应该使用 fread() 和 fwrite() 而不是 fgets() 和 fprintf()。并检查 fread() 的结果,它会告诉您读取了多少字节,因此您应该只发送那么多字节。