首页 文章

使用TCP发送大文件

提问于
浏览
1

我的客户端程序需要将大文件发送到服务器程序 . 客户端连接到服务器并且服务器接受它后,客户端指定它将发送的文件的名称 . 现在,客户端需要使用TCP发送文件 .

我知道如果文件的大小很小(小于1k字节?),我可以直接使用套接字编程中的“send”函数调用它来发送它 . 但是,如果我的文件大小很大,大约100 MB,那么同样的工作吗?我想知道“发送”本身是否处理将大数据分解为数据包并可靠地发送它们的任务,还是我应该处理这个?

谢谢 .

1 回答

  • 0

    我正在尝试类似的东西和我的客户端代码看起来像这样

    static void send_file(char *ipAddress, char *filename)
    {
            struct sockaddr_in serverAddr;
            int skt;
            uint32_t addr_size;
            uint32_t sz;
            int32_t sent_bytes;
            FILE *fp;
    
            if ( inet_pton(AF_INET, ipAddress, &(serverAddr.sin_addr)) ){
                    skt = socket(PF_INET, SOCK_STREAM, 0);
                    serverAddr.sin_family = AF_INET;
            }
            else {
                    inet_pton(AF_INET6, ipAddress, &(serverAddr.sin_addr));
                    skt = socket(PF_INET6, SOCK_STREAM, 0);
                    serverAddr.sin_family = AF_INET6;
            }
    
            serverAddr.sin_port = htons(7891);
    
            memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));
    
            addr_size = sizeof(serverAddr);
            connect(skt, (struct sockaddr *) &serverAddr, addr_size);
    
            /*find file size*/
            fp = fopen(filename, "r");
            fseek(fp,0,SEEK_END);
            sz = ftell(fp);
            rewind(fp);
    
            sent_bytes = send(skt, fp, sz, 0);
            printf("sent %d bytes\n", sent_bytes);
            fclose(fp);
    }
    

相关问题