c - 带有套接字的代码中的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;
}
解决方案
问题是这里的行缓冲:
printf("cnt is %d", cnt);
所以你不会很快得到输出,因为accept()
块。只需添加一个换行符:
printf("cnt is %d\n", cnt);
那应该可以解决您的问题。
推荐阅读
- python - SequenceMatcher - 查找两个或多个数据列表中最相似的两个元素
- c# - 在 .net 4.7 中找不到 EntryPoint 属性的替代品
- plsql - 在预期以下情况之一时遇到符号“INTO”
- c# - 用于在.net中选择范围的正则表达式
- java - 如何将图像存储到适合文件中
- kubernetes-ingress - 私有子网中的 EKS,公共子网中的负载均衡器
- c++ - 有没有办法在 C++ 中有效地复制包装的 JNI 对象?
- mongodb - 打印 MongoDB 集合数据 - GoLang,结果不如预期
- chef-infra - 需要澄清有关节点管理、Chef 中的角色
- lua - 将表拆分为 9