用socket发送文件

时间:2013-06-26 02:32:45

标签: c sockets

这段代码有什么问题(C - Linux)?

我想从服务器接收一个文件,只要有一个字节,我就立即发送这个字节。但它不起作用。这很重要。

int Recv_File(int server,int client,char *buffer_ricezione,size_t dimensione_file){

    ssize_t nwritten,nread;
    size_t n;
    char c;

    for (n=1; n<dimensione_file; n++) {
        nread = recv(server,&c,1,0);
        if (nread == 1) {
            nwritten = send(client,&c,1,0);
        }else{
            return -1; // chiudo connessione con il client
        }
    }
    return 1;
}

由于

2 个答案:

答案 0 :(得分:0)

可能n应该以0开头

for (n=0; n<dimensione_file; n++) {
    nread = recv(server,&c,1,0);
    if (nread == 1) {
        nwritten = send(client,&c,1,0);
    }else{
        return -1; // chiudo connessione con il client
    }
}

答案 1 :(得分:0)

你可以这样试试,buffer_ricezione也将填充传输的数据。 读取一个字节并一次发送一个字节并不好,浪费了大量资源。 您的代码不会在接收缓冲区中放置任何东西,而这些缓冲区会保留传输的数据。

 int Recv_File(int server,int client,char *buffer_ricezione,size_t dimensione_file){
 // This code assumes that buffer_recezione has been allocated at least dimensione_file

     ssize_t nwritten,nread;
     size_t n;
     // char c;
     size_t bLeft=dimensione_file;

     while (bLeft > 0)
     {
         nread = recv(server, buffer_ricezione, bLeft, 0);
         if (nread > 0) {
             if ((nwritten = send(client, buffer_ricezione, nread, 0)) != nread)
             {
                  return -1; // impossible to send to the socket, quit
             }
             bLeft -=nread;
             buffer_ricezione += nread;
         }else{
             return -1; // chiudo connessione con il client
         }
     }
     return 1;
 }