1

このコード (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;
}

ありがとう

4

2 に答える 2

0

この方法で試すこともできます。また、 buffer_ricezione は送信されたデータで満たされます。一度に 1 バイトを読み取って 1 バイトずつ送信するのは良くなく、多くのリソースが浪費されます。あなたのコードは、転送されたデータを保持すると思われる受信バッファに何も入れません。

 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;
 }
于 2013-06-26T17:26:03.743 に答える
0

おそらく、n0から始まるはずです

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
    }
}
于 2013-06-26T02:39:03.193 に答える