【问题标题】:TCP/IP simple file server in c problems with reading on the server in CC中的TCP / IP简单文件服务器在C中的服务器上读取问题
【发布时间】:2016-12-15 19:46:25
【问题描述】:

我将向您展示我的服务器和客户端循环。

事实是我对我想在客户端发送的文件进行了 fwrite,然后我将它写入服务器,但是我的服务器的读取没有收到我写入的字节的全部,比如如果丢失了一些字节。我该怎么做才能改变呢?

这是我的循环:

BUF和BUFF等于1024。

客户端.c:

  while(taille)
  {
  size=fread(buffer,1,BUF,f_read);
  write(sock, buffer,size);
  taille -=size;
  stat+=size;
  }

服务器.c:

  //I do the loop with x to try to fix the bytes lost, but don't work :/
  int x = 0;
  while(size)
  {
   while(x!=BUFF)
   {
     x=read(service, mess_recu, BUFF);
   }
   fwrite(mess_recu,x,1,f_write);
   size-=x;
   x=0;
  }

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    据我所知,您可以想象,如果您将 1000 个字节发送到套接字中,您将能够进行读取并获取 1000 个字节。事情并非如此。

    发生的情况稍微复杂一些,因为这取决于您使用的套接字类型。使用 TCP 时,套接字是面向流的,因此无论您执行读取时流上碰巧有多少字节,您都将读取。最终,这将增加您发送的字节总数,但您必须进行多次读取。

    如果您使用面向数据报的套接字(如 UDP)。您的读取将对应于通过网络发送的数据报。因此,例如,如果您发送一个 700 字节的数据报,您将在远程端收到一个 700 字节的数据报。问题在于,与 TCP 不同,各个读取和写入之间没有相互排序,因此,如果您发送一个 5 字节的数据包和第二个 7 字节的数据包,则阅读器既不能保证任何特定的顺序,也不能保证它会得到任何包。

    【讨论】:

      猜你喜欢
      • 2010-10-21
      • 2011-11-16
      • 1970-01-01
      • 2016-09-16
      • 2020-04-15
      • 2015-12-29
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多