首页 > 解决方案 > 带有套接字的代码中的while()循环问题

问题描述

我的 C 代码中有简单的 while() 循环,但 printf() 无法正常工作,服务器将新客户端连接到他,新连接没有问题。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>

int clients_fd[100];
int cnt = 0;

int main() {
    int serv_sock = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in serv_addr;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(8080);
    serv_addr.sin_family = AF_INET;

    bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
    listen(serv_sock, 100);

    while (cnt < 100) {
        int client_sock = accept(serv_sock, NULL, NULL);
        clients_fd[cnt] = client_sock;
        printf("cnt is %d", cnt);
        cnt++;
    }

    return 0;
}

标签: c

解决方案


问题是这里的行缓冲:

printf("cnt is %d", cnt);

所以你不会很快得到输出,因为accept()块。只需添加一个换行符:

printf("cnt is %d\n", cnt);

那应该可以解决您的问题。


推荐阅读