使用TCP

时间:2017-03-24 20:58:40

标签: sockets tcp

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

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

感谢。

1 个答案:

答案 0 :(得分: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);
}
相关问题