三向握手文件传输

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);
  // }


}
答案

您应该重写您的客户端。

  1. write(sockfd, buffer, 255);发送垃圾,因为并非所有字符串的长度均为255个字符,并且您正在使用fscanf()从文件中读取字符串。这可能是您所有“ VS”来自的地方。

  2. [getc(fd)使您的客户端偶尔跳过一个字符。

  3. 您的单词计数例程显然会干扰您的文件发送代码,使其成为不同的循环或以其他方式分开。

总而言之,我将从一个简单的客户端开始:

write(sockfd, "ABCDEFGH
", 9);

并查看是否可以在服务器端收到此信息。然后做更复杂的事情。

以上是关于三向握手文件传输的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章搞明白TCP协议的三次握手四次挥手

TCP网络协议的三次握手及代码释义

如何在 lmer 拟合的三向交互作用下使用 R 预测主预测器的斜率

深入理解TCP协议及其源代码——三次握手

客户端和服务器的 SSL 握手失败

Python面试重点(进阶篇)