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 会成功创建文件,但之后什么也没有发生。没有数据写入文件。既不是“HI all”,也不是接收到的数据。是的,正在接收数据,我通过打印接收到的数据来检查它。请帮帮我。提前致谢。运行平台为linux。

4

1 回答 1

2

首先,您应该检查 的返回值fopen()以确保log不是NULL。之后,您应该使用fflush(log)before fflush(stdout)

另一件要提的事情是,你永远不会退出第二个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 回答