0

クライアントからの接続を受け入れるだけのサーバーのプログラムを作成しました。そのために、無限ループの受け入れ関数。しかし、ループの直前に出力されたメッセージを実行すると、出力されません。私のコードは次のとおりです。

     #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

4 に答える 4

2

printf は行で終了するので、最後に \n を追加して出力を確認してください。

        printf("conneted \n");
于 2013-03-22T07:14:54.923 に答える
1

「接続待ち」がバッファリングされ、クライアントが接続したときに印刷される可能性があります。クライアントを接続して出力を確認しましたか?

これも試してください:

if((lis_sock=listen(sock,10))<0)
        printf("\nlisten error");
else
        printf("listen\nwaiting to connect");
于 2013-03-22T07:21:56.480 に答える
1

printf の前にこれを試してください。

setvbuf (標準出力、NULL、_IONBF、0);

于 2013-03-22T07:32:15.797 に答える
0

kanika は fflush(stdout) が解決したと述べたので、aniket はバッファリングされていると述べました。バッファリングされたprintfの2つの可能な解決策

1) fflush(stdout)stdout がバッファリングされ、改行の後に whats が出力されるため、使用します。

また

setbuf(stdout,NULL)2) .(または setvbuf の場合もあります)によるバッファリングを無効にします。

于 2013-03-22T07:47:05.537 に答える