0

ネットワークからソケットを介してデータを受け取り、それをファイルに書き留めるプログラムを作成しました。私はその目的のために次のコードを使用しました:

FILE *log;
log = fopen("time.log", "a"); 
fprintf(log,"HI all");
while(1)
{  
    sin_size = sizeof(struct sockaddr_in);
    connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
    printf("\n I got a connection from (%s , %d)", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
    fflush(stdout);           
    while(1)
    {       
        fflush(stdout);
        fgets(send_data,1000,stdin);
        send(connected, send_data,strlen(send_data), 0);
        bytes_recieved = recv(connected,recv_data,1024,0);
        recv_data[bytes_recieved] = '\0';
        char newln[2]="\n";
        int len=strlen(recv_data), len1=strlen(newln);
        fwrite(recv_data, len, 1, log);
        fwrite(newln, len1, 1, log);
        fflush(stdout);
    }
}   
fclose(log);

ファイルが存在しない場合、fopenはファイルを正常に作成しますが、その後は何も起こりません。ファイルにデータは書き込まれません。「HIall」も受信データもありません。はい、データを受信して​​います。受信したデータを印刷して確認しました。私を助けてください。前もって感謝します。オペレーティングプラットフォームはLinuxです。

4

1 に答える 1

2

まず、の戻り値をチェックしfopen()て、がでlogはないことを確認する必要がありNULLます。fflush(log)その後、直前に使用する必要がありますfflush(stdout)

もう1つ言及すべきことは、2番目のループから抜け出すことは決してないwhile(1)ので、これも修正する必要があるということです。

if (bytes_received == 0) {
    /* client closed the connection */
    close(connected);
    break;
}
recv_data[bytes_recieved] = '\0';
char newln[2]="\n";
于 2012-05-15T12:34:05.990 に答える