C网络编程错误,因为出现错误\n
我在网络实验室尝试一段代码时遇到了一个奇怪的问题。代码无法工作,因为出现了\n。我在这里写代码:C网络编程错误,因为出现错误\n,c,sockets,unix,network-programming,C,Sockets,Unix,Network Programming,我在网络实验室尝试一段代码时遇到了一个奇怪的问题。代码无法工作,因为出现了\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
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");
它工作得很好。请告诉我为什么会这样
printf("socket created");
在刷新标准输出缓冲区之前不会打印。刷新缓冲区的一种方法是使用换行符\n。这就是为什么
printf("socket created\n");
被打印出来。所以,问题不在于printf,而在于超出了这一点
正如Jon所说,检查系统调用返回值是否存在错误情况将帮助您找到问题。欢迎使用堆栈溢出。请尽快阅读这一页。你在错误检查方面有点欠缺,是吗?您确实检查了
listen()
调用;那很好。但至少还有4个其他系统调用也需要检查。您的memset()
调用缺少反斜杠:'0'
与'\0'
非常不同。但是,printf()
中的换行符如何使事情发生变化并不明显。您所说的“不工作”是什么意思?这是正确的。此外,您还可以通过调用fflush(stdout)
强制刷新缓冲区(即要打印到屏幕上的文本)。