使用无限循环时不打印消息

时间:2013-03-22 07:12:30

标签: c sockets loops

我编写了一个服务器程序,只接受来自客户端的连接。为此,无限循环中的accept函数。但是当它执行在循环未打印之前打印的消息时。我的代码是:

     #include<stdio.h>
    #include<sys/socket.h>
    #include<sys/types.h>
    #include<netinet/in.h>
    void main()
    {
    int sock,bind_sock,lis_sock,cli_sock,addr_len;
    struct sockaddr_in addr,cli_addr;

    if ((sock=socket(AF_INET,SOCK_STREAM,0))<0)
            printf("\nsocket error");
    else
            printf("socket");
    addr.sin_family=AF_INET;
    addr.sin_port=htons(5012);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
    if((bind_sock=bind(sock,(struct sockaddr *)&addr,sizeof(addr)))<0)
            printf("\nBound error");
     else
            printf("Bound");

    if((lis_sock=listen(sock,10))<0)
            printf("\nlisten error");
    else
            printf("listen\nwaiting for connection" );
    while(1)
    {
            addr_len=sizeof(cli_addr);
            cli_sock=accept(sock,(struct sockaddr *)&cli_addr,&addr_len);
            if(cli_sock<0)
            printf("\nConnetion Error\n");
            else
            printf("conneted\n");

    }

} 它给出的输出是:

    ]$ ./a.out
   socketBoundlisten

4 个答案:

答案 0 :(得分:2)

printf是行终止的,所以将\ n添加到结尾并检查输出.example

        printf("conneted \n");

答案 1 :(得分:1)

您的“等待连接”可能会被缓冲,并且可能在您的客户端连接时打印。您是否尝试连接客户端并查看输出?

也试试这个:

if((lis_sock=listen(sock,10))<0)
        printf("\nlisten error");
else
        printf("listen\nwaiting to connect");

答案 2 :(得分:1)

尝试在printf之前执行此操作。

  

setvbuf(stdout,NULL,_IONBF,0);

答案 3 :(得分:0)

kanika你提到fflush(stdout)已经解决了,因为aniket提到它正在被缓冲。 2缓冲printf的可能解决方案

1)使用fflush(stdout)因为stdout被缓冲并在换行后打印出来。

OR

2)通过setbuf(stdout,NULL)禁用缓冲。(或者可以是setvbuf)。