C 服务器在没有printf()的情况下会卡住,只有printf()才能正常工作,非常奇怪
我是一个新手,刚刚开始学习关于TCP/IP、客户端和服务器的数据网络 我正在为试图从客户端读取数据的服务器编写一个程序(来自使用C 服务器在没有printf()的情况下会卡住,只有printf()才能正常工作,非常奇怪,c,tcp,tcp-ip,C,Tcp,Tcp Ip,我是一个新手,刚刚开始学习关于TCP/IP、客户端和服务器的数据网络 我正在为试图从客户端读取数据的服务器编写一个程序(来自使用scanf()的用户输入)。但最奇怪的是: 服务器将无法执行read()功能 但是,当我将printf()函数放在read()函数之后时,它没有卡住!但是我相信printf()实际上对代码的运行没有任何影响。这让我发疯,我无法理解 简单代码如下: simpleChildSocket = accept(simpleSocket,(struct sockaddr *)&am
scanf()
的用户输入)。但最奇怪的是:
服务器将无法执行read()
功能
但是,当我将printf()
函数放在read()
函数之后时,它没有卡住!但是我相信printf()
实际上对代码的运行没有任何影响。这让我发疯,我无法理解
简单代码如下:
simpleChildSocket = accept(simpleSocket,(struct sockaddr *)&clientName,&clientNameLength);
if (simpleChildSocket == -1) {
fprintf(stderr, "Cannot accept connections!\n");
close(simpleSocket);
exit(1);
}
//read data
returnStatus = read(simpleChildSocket, username, sizeof(username));
printf("Received username: %s\n", username); //*That's where strange happens*
if(returnStatus > 0){
printf("Yes");
}
else{
printf("No");
close(simpleChildSocket);
}
问题是
中的printf
如果不打印任何\n
,则输出会被缓冲但不会刷新。在读取后添加printf
包含\n
这就是为什么您可以看到输出,但在这两种情况下代码的行为完全相同
将print(“Yes”)
更改为printf(“Yes\n”)
,类似地,对于“No”
,问题在于中的printf
如果不打印任何\n
,则输出会被缓冲,但不会被刷新。在读取后添加printf
包含\n
这就是为什么您可以看到输出,但在这两种情况下代码的行为完全相同
将print(“Yes”)
更改为printf(“Yes\n”)
,同样,对于“No”
,除非read()
返回正值,否则打印用户名是无效的。这里没有显示太多内容。像simpleSocket
,clientNameLength
,username
。它们是如何定义和初始化的?在这些事情中,很可能在字符数组上调用'printf(“%s…”),而字符数组不保证NUL终止。除非read()
返回了一个正值。这里没有显示太多的内容。例如simpleSocket
,clientNameLength
,username
。它们是如何定义和初始化的?在这些内容中,很可能在不保证NUL终止的字符数组上调用了“printf”(%s…)。