我在网络实验室尝试了一段代码,我遇到了一个奇怪的问题。由于 \ n ,代码无效。我在这里写代码:
int main()
{
int sockid;
char sbuff[50];
int conn_id,c;
struct sockaddr_in serv_addr;
sockid=socket(AF_INET,SOCK_STREAM,0);
printf("socket created");
memset(sbuff,'0',sizeof(sbuff));
memset(&serv_addr,'0',sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(4242);
bind(sockid,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
if( listen(sockid,5)==-1)
{
printf("too many connections try again later");
return -1;
}
while(1)
{
conn_id=accept(sockid,(struct sockaddr*)NULL,NULL);
strcpy(sbuff,"msg from server");
write(conn_id,sbuff,strlen(sbuff));
close(conn_id);
}
return 1;
}
此代码不起作用,但如果我写:
printf("socket created \n");
取代:
printf("socket created");
效果很好。请告诉我为什么会这样?
答案 0 :(得分:2)
printf("socket created");
在刷新stdout缓冲区之前不会打印。刷新缓冲区的一种方法是使用换行符\ n。这就是为什么
printf("socket created\n");
打印出来。所以,问题不在于你的printf,而是在那之后的某个地方。
正如Jon所说,检查错误条件的系统调用返回值将帮助您找到问题。