三向握手文件传输
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三向握手文件传输相关的知识,希望对你有一定的参考价值。
我正在尝试在服务器和客户端之间传输文件内容。由于某些原因,发送的所有内容都显示为VS?在服务器端。我包含了发送文件内容的功能
Client.c:
void send_file_to_server(struct tcp_hdr tcp_seg, int sockfd){
char buffer[255];
char c;
bzero(buffer, 255);
int words = 0;
FILE *fd;
fd = fopen("file.txt", "r");
while((c = getc(fd)) != EOF){
fscanf(fd, "%s", buffer);
if(isspace(c) || c==' '){
words++;
}
}
write(sockfd, buffer, 255);
}
Server.c
void get_file_from_client(struct tcp_hdr tcp_seg, int sockfd){
FILE *fp;
char buffer[255];
bzero(buffer,255);
int ch = 0;
fp = fopen("file_two.txt", "a");
int words;
read(sockfd, buffer, 255);
printf("%s
", buffer);
// while(ch != words){
// read(sockfd, buffer, 255);
// fprintf(fp, "%s", buffer);
// }
}
答案
您应该重写您的客户端。
write(sockfd, buffer, 255);
发送垃圾,因为并非所有字符串的长度均为255个字符,并且您正在使用fscanf()
从文件中读取字符串。这可能是您所有“ VS”来自的地方。[
getc(fd)
使您的客户端偶尔跳过一个字符。您的单词计数例程显然会干扰您的文件发送代码,使其成为不同的循环或以其他方式分开。
总而言之,我将从一个简单的客户端开始:
write(sockfd, "ABCDEFGH
", 9);
并查看是否可以在服务器端收到此信息。然后做更复杂的事情。
以上是关于三向握手文件传输的主要内容,如果未能解决你的问题,请参考以下文章