2013-03-03 4 views
0
void RecvFile() 
{ 
int rval; 
char buf[0x1000]; 
FILE *file = fopen("C:\\pic.bmp", "wb"); 
if (!file) 
{ 
    printf("Can't open file for writing"); 
    return; 
} 

do 
{ 
    rval = recv(winsock, buf, sizeof(buf), 0); 
    if (rval < 0) 
    { 
     // if the socket is non-blocking, then check 
     // the socket error for WSAEWOULDBLOCK/EAGAIN 
     // (depending on platform) and if true then 
     // use select() to wait for a small period of 
     // time to see if the socket becomes readable 
     // again before failing the transfer... 

     printf("Can't read from socket"); 
     fclose(file); 
     return; 
    } 

    if (rval == 0)     
     break; //line 159 

    int off = 0; 
    do 
    { 
     int written = fwrite(&buf[off], 1, rval - off, file); 
     if (written < 1) 
     { 
      printf("Can't write to file"); 
      fclose(file); 
      return; 
     } 

     off += written; 
    } 
    while (off < rval) 
} //line 175 

fclose(file); 
} 

175 ошибка синтаксиса перед тем «}» маркер
159 смущен предыдущих ошибок, выручаяC Передача файла сокета

Я не знаю, что делать ... Вы можете мне помочь? Я все еще новичок в программировании. Я вставил строки ошибок в код. Я не понимаю, почему эта ошибка возникает ... Можете ли вы, ребята, объяснить мне почему?

+0

да, как я могу это исправить? Я не могу просто удалить его? Я думаю, что это ошибка проверки ... –

+2

Это довольно ужасный путь для цикла indent do-while ... Попробуйте «сделать {' или хотя бы '} while (...);' как одну строку, не расколоть их. Вероятно, вы бы заметили ошибку самостоятельно с разным отступом ... – hyde

+0

спасибо вам, ребята ... теперь я понимаю, почему ... –

ответ

2

На самом деле вам не хватает ; в то время как петля

while (off < rval); // 174 line 
       ^

второй внешний контур там нет, а

do{ 

}// 175 line 
while() // this is missing ??? 

Я не 100% уверен, но я думаю, что вам нужно бесконечный цикл в наружной, как (примерный код ниже) Читать комментарии:

do{ 

    // rev = recv(.... 
    if(rev <){ 
    // you return from here that is reason i believe you need infinite loop 
    // code 
    } 
    //code 
    do{ 
     // your code 
    }while (off < rval); // at like 174 
}while(1); // line 175 
0

На строке 175 вы должны иметь оператор while, так как в начале у вас есть соответствующий оператор do. Точка с запятой также отсутствует для другой инструкции do-while в вашем коде.

void RecvFile() 
{ 
int rval; 
char buf[0x1000]; 
FILE *file = fopen("C:\\pic.bmp", "wb"); 
if (!file) 
{ 
    printf("Can't open file for writing"); 
    return; 
} 

do //******Where is the while for this do statement?***** 
{ 
    rval = recv(winsock, buf, sizeof(buf), 0); 
    if (rval < 0) 
    { 
     // if the socket is non-blocking, then check 
     // the socket error for WSAEWOULDBLOCK/EAGAIN 
     // (depending on platform) and if true then 
     // use select() to wait for a small period of 
     // time to see if the socket becomes readable 
     // again before failing the transfer... 

     printf("Can't read from socket"); 
     fclose(file); 
     return; 
    } 

    if (rval == 0)     
     break; //line 159 

    int off = 0; 
    do 
    { 
     int written = fwrite(&buf[off], 1, rval - off, file); 
     if (written < 1) 
     { 
      printf("Can't write to file"); 
      fclose(file); 
      return; 
     } 

     off += written; 
    } 
    while (off < rval) // *** A semicolon is needed here *** 
} //line 175 

fclose(file); 
} 
0

Вы забыли точку с запятой после do...while блока

изменения

while (off < rval) в while (off < rval);

0

Есть 2 ошибки.

  1. while (off < rval) следует заменить while (off < rval);
  2. Вы пропускаете while заявление для первого do