从客户端到服务器的文件传输

穆克什·古普塔

我正在尝试将文件从客户端发送到服务器。它有时起作用,有时不起作用。第一次尝试发送文件时,它将发送损坏的文件,并且在服务器端形成的文件端是其大小的两倍。但是,首次尝试后,所有尝试的文件都成功传输。谁能帮我这个 ?

客户端

     message msg;
        msg.type = SEND_FILE;
        char *username, *filename;

        username = strtok(input+6, " ");
        filename = strtok(NULL, "");

        //Get Picture Size
        printf("Getting Picture Size\n");
        FILE *picture;
        picture = fopen(filename, "r");
        int size;
        fseek(picture, 0, SEEK_END);
        size = ftell(picture);
        fseek(picture, 0, SEEK_SET);

        //Send Picture Size
        printf("Getting Picture Size\n");
        sprintf(msg.data, "%d", size);
        strncpy(msg.username, username, 20);

        if(send(connection->socket, &msg, sizeof(message), 0) < 0)
        {
            perror("Send failed");
            exit(1);
        }
        //Send Picture as Byte Array
        printf("Sending Picture as Byte Array\n");
        char send_buffer[size+1];
        fread(send_buffer, 1, sizeof(send_buffer), picture);
        write(connection->socket, send_buffer, sizeof(send_buffer));
        bzero(send_buffer, sizeof(send_buffer));

服务器

  //Read Picture Size
printf("Reading Picture Size\n");
int size = atoi(message_text);

//Read Picture Byte Array
printf("Reading Picture Byte Array\n");
char p_array[size];
printf("Converting Byte Array to Picture %d\n", size);
FILE *image;
image = fopen("c4.png", "w");
int readSize = 0;
while (readSize < size) {
  readSize = readSize + read(clients[sender].socket, p_array, size);
  fwrite(p_array, 1, sizeof(p_array), image);
}

fclose(image);
ALK

对于初学者:

您不想在每个字节上存储相同数量的字节 fwrite()

fwrite(p_array, 1, sizeof(p_array), image);

但仅实际读取的字节数。

sizeof(p_array)返回的大小p_array,该大小size的大小的乘积char后者定义为1


除此之外,对的调用read() 完全没有错误检查,还测试了另一端是否关闭了连接。这并不遥不可及。


要解决此问题,您可以执行以下操作:

#include <errno.h> /* for errno */

...

  size_t size = atoi(message_text);
  printf("Reading Picture Byte Array\n");
  char p_array[size];
  size_t readSize = 0;
  while (readSize < size) {
    ssize_t result = read(clients[sender].socket, p_array, size); /* Mind the ssize_t, it's *not* size_t! */
    if (0 >= result)
    {
      if (0 == result)
      {
        fprintf(stderr, "The other end gracefully shut down the connection.\n");

        break;
      }
      else
      {
        if (EINTR == errno)  /* got interrupted, start over */
        {
           continue;
        }

        if (EAGAIN == errno)  /* in case reading from a non-blocking socket: no data available, start over */
        {
           continue;
        }

        /* Something went wrong unrecoverable. */
        perror("read() failed");

        break;
      }
    }
    else
    {
       fwrite(p_array, 1, result, image); 
       /* Also add error checking here! */
       readSize += result;
    }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

服务器/客户端之间的文件传输

来自分类Dev

需要从客户端到服务器传输多个文件

来自分类Dev

如何上传客户端文件到服务器?

来自分类Dev

在grpc客户端之间传输“斑点”-服务器

来自分类Dev

在客户端服务器套接字连接中正确传输文件

来自分类Dev

Go中的TCP客户端/服务器文件传输

来自分类Dev

使用socket.io-stream将文件从服务器流传输到客户端

来自分类Dev

在C中将文件从服务器传输到客户端时获取垃圾值?

来自分类Dev

如何将数据从服务器传输到客户端js文件?

来自分类Dev

通过网络传输文件:是从客户端发送还是从服务器发送?

来自分类Dev

C 3G文件传输客户端/服务器Linux

来自分类Dev

在C中使用UDP进行服务器-客户端文件传输

来自分类Dev

通过URLConnection将音频文件从客户端传输到Http服务器

来自分类Dev

通过Java中的套接字将文件从客户端传输到服务器

来自分类Dev

Netty:TCP 客户端服务器文件传输:异常 TooLongFrameException:

来自分类Dev

C# 客户端到服务器数据传输服务器正在接收以前的客户端消息 Async Server - Async Client

来自分类Dev

客户端数据到服务器端

来自分类Dev

处理SSL客户端到服务器到客户端的最佳方法(中继?)

来自分类Dev

将音频从客户端流传输到服务器再传输到多个客户端Java

来自分类Dev

从服务器到客户端的MVC推送通知

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

Java中从客户端到服务器的通信

来自分类Dev

从服务器到客户端启动ssh连接

来自分类Dev

从服务器到客户端连续发送byte []?

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

将var从服务器传递到客户端

来自分类Dev

从客户端到服务器(流星)调用方法

来自分类Dev

TCP客户端到服务器损坏数据

来自分类Dev

NodeJS 服务器到 NodeJS 客户端通知

Related 相关文章

  1. 1

    服务器/客户端之间的文件传输

  2. 2

    需要从客户端到服务器传输多个文件

  3. 3

    如何上传客户端文件到服务器?

  4. 4

    在grpc客户端之间传输“斑点”-服务器

  5. 5

    在客户端服务器套接字连接中正确传输文件

  6. 6

    Go中的TCP客户端/服务器文件传输

  7. 7

    使用socket.io-stream将文件从服务器流传输到客户端

  8. 8

    在C中将文件从服务器传输到客户端时获取垃圾值?

  9. 9

    如何将数据从服务器传输到客户端js文件?

  10. 10

    通过网络传输文件:是从客户端发送还是从服务器发送?

  11. 11

    C 3G文件传输客户端/服务器Linux

  12. 12

    在C中使用UDP进行服务器-客户端文件传输

  13. 13

    通过URLConnection将音频文件从客户端传输到Http服务器

  14. 14

    通过Java中的套接字将文件从客户端传输到服务器

  15. 15

    Netty:TCP 客户端服务器文件传输:异常 TooLongFrameException:

  16. 16

    C# 客户端到服务器数据传输服务器正在接收以前的客户端消息 Async Server - Async Client

  17. 17

    客户端数据到服务器端

  18. 18

    处理SSL客户端到服务器到客户端的最佳方法(中继?)

  19. 19

    将音频从客户端流传输到服务器再传输到多个客户端Java

  20. 20

    从服务器到客户端的MVC推送通知

  21. 21

    服务器到客户端的通信方法

  22. 22

    Java中从客户端到服务器的通信

  23. 23

    从服务器到客户端启动ssh连接

  24. 24

    从服务器到客户端连续发送byte []?

  25. 25

    服务器到客户端的通信方法

  26. 26

    将var从服务器传递到客户端

  27. 27

    从客户端到服务器(流星)调用方法

  28. 28

    TCP客户端到服务器损坏数据

  29. 29

    NodeJS 服务器到 NodeJS 客户端通知

热门标签

归档