【问题标题】:Why does this server not outputting anything?为什么这个服务器不输出任何东西?
【发布时间】:2014-04-30 02:32:14
【问题描述】:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>

int main()
{

int sock, newsock;
    struct sockaddr server_name = {AF_UNIX, "Fred"};
    socklen_t len=sizeof(struct sockaddr)+5;

    if( (sock=socket(AF_UNIX,SOCK_STREAM,0)) ==-1)
    {
        printf("error creating socket");
        return -1;
    }

    if( bind(sock,&server_name,len) != 0 ) //binding
    {

        printf("socket bind error ");
        return -1;
    }


   if(listen(sock,10)!=0)  //set sock to listen
   {
        printf("error listening");
        return -1;
   }

    printf("Waiting for connections....");

   while(1)
   {
        newsock=accept(sock, (struct sockaddr*)NULL, NULL);

        char temp[1000]="gggggg\n";
        write(newsock,temp,strlen(temp));

        write(newsock,temp,strlen(temp));
        close(newsock);

        sleep(1);

   }

return 0;
}

“等待连接...”没有出现在我的屏幕上。有什么问题?我到处都尝试了打印功能。什么都没有出现..有什么问题?我没有看到我关闭了标准输出..有人可以帮忙吗?谢谢。

【问题讨论】:

  • 输出被缓冲,直到你打印一个换行符或调用fflush(stdout);

标签: c loops printf


【解决方案1】:

标准输出默认是行缓冲的。您的程序输出一些没有新行的内容,然后进入循环。您需要像这样添加一个新行:

printf("Waiting for connections....\n");

出于类似的原因,错误消息应该输出到标准错误,因为它没有被缓冲。

fprintf(stderr, "error creating socket\n");

【讨论】:

    【解决方案2】:

    首先,你应该在日志的末尾加上'\n':“Waiting for connections....\n”,这样日志就不能被缓冲,而不能被输出。

    其次,你的程序是错误的,正确的程序是这样的:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    int main()
    {
    
        int sock, newsock;
        struct sockaddr_un server_name;
        socklen_t len= sizeof(server_name);
        unlink("Fred");
        if( (sock=socket(AF_UNIX,SOCK_STREAM,0)) ==-1)
        {
            printf("error creating socket\n");
            return -1;
        }
    
        server_name.sun_family = AF_UNIX;
        strcpy(server_name.sun_path, "Fred");
    
        if( bind(sock,(struct sockaddr*)&server_name,len) != 0 ) //binding
        {
    
            printf("socket bind error \n");
            return -1;
        }
    
    
       if(listen(sock,10)!=0)  //set sock to listen
       {
            printf("error listening\n");
            return -1;
       }
    
       printf("Waiting for connections....\n");
    
       while(1)
       {
            newsock=accept(sock, (struct sockaddr*)NULL, NULL);
    
            char temp[1000]="gggggg\n";
            write(newsock,temp,strlen(temp));
    
            write(newsock,temp,strlen(temp));
            close(newsock);
    
            sleep(1);
    
       }
    
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2021-12-11
      • 2020-09-07
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多