我是C和套接字编程的新手,我正在尝试做一个简单的客户端服务器应用程序。
我发现每当我尝试使用以下代码从服务器连接到客户端时, accept 语句将0返回 connectfd ,当我尝试发送消息时从客户端到达服务器,
if(connectfd = (accept(sockfd , (struct sockaddr *)NULL , NULL)) < 0)
{
printf("problem while connection to client\n");
return(0);
}
但是,当我尝试下面的代码而不是接受语句之上的代码时,将<4>作为值返回 connectfd 并且客户端服务器通信完美发生
connectfd=accept(sockfd,(struct sockaddr *)NULL,NULL);
if(connectfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
有人可以对此作出解释吗?
答案 0 :(得分:4)
这是因为你的括号在错误的地方:
if(connectfd = (accept(sockfd , (struct sockaddr *)NULL , NULL)) < 0)
应该是:
if ((connectfd = accept(sockfd , (struct sockaddr *) NULL, NULL)) < 0)
由于C operator precedence,其中<
的优先级高于=
,因此connectfd
分配的内容是{{的返回值]之间的比较结果1}}和accept
,而不是您想要的0
的返回值。
答案 1 :(得分:0)
if(connectfd = (accept(sockfd , (struct sockaddr *)NULL , NULL)) < 0)
将“(accept(...)&lt; 0)”分配给“connectfd”
你应该写
if((connectfd = accept(sockfd , (struct sockaddr *)NULL , NULL)) < 0)
答案 2 :(得分:0)
由于优先规则,
if (a = b < c)
被解释为b < c
到a
的分配,而不是a = b
与c
的比较。
这样做的结果是你必须放置括号,Sean already writes in his answer。