C网络编程错误因为\ n \ n

时间:2013-11-19 04:00:58

标签: c sockets unix network-programming

我在网络实验室尝试了一段代码,我遇到了一个奇怪的问题。由于 \ n ,代码无效。我在这里写代码:

int main()
{
    int sockid;
    char sbuff[50];
    int conn_id,c;
    struct sockaddr_in serv_addr;
    sockid=socket(AF_INET,SOCK_STREAM,0);
    printf("socket created");
    memset(sbuff,'0',sizeof(sbuff));
    memset(&serv_addr,'0',sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    serv_addr.sin_port=htons(4242);

    bind(sockid,(struct sockaddr *)&serv_addr,sizeof(serv_addr));

    if( listen(sockid,5)==-1)
    {
        printf("too many connections try again later");
        return -1;
    }

    while(1)
    {
        conn_id=accept(sockid,(struct sockaddr*)NULL,NULL);
        strcpy(sbuff,"msg from server");
        write(conn_id,sbuff,strlen(sbuff));
        close(conn_id);
    }
    return 1;
}

此代码不起作用,但如果我写:

printf("socket created \n");

取代:

printf("socket created");

效果很好。请告诉我为什么会这样?

1 个答案:

答案 0 :(得分:2)

printf("socket created"); 

在刷新stdout缓冲区之前不会打印。刷新缓冲区的一种方法是使用换行符\ n。这就是为什么

printf("socket created\n"); 

打印出来。所以,问题不在于你的printf,而是在那之后的某个地方。

正如Jon所说,检查错误条件的系统调用返回值将帮助您找到问题。