if / else控制流量问题

时间:2011-02-28 09:36:20

标签: if-statement

if (strcmp(buffer,"change work")==0)
{
   close(newsockfd);                   /*closing the old port*/
   close(sockfd);
   printf("Changing port to 51717....\n");
   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   if (sockfd < 0)
   error("ERROR opening socket");
   bzero((char *) &serv_addr, sizeof(serv_addr));
   portno = atoi("51717");
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = INADDR_ANY;
   serv_addr.sin_port = htons(portno);
   if (bind(sockfd, (struct sockaddr *) &serv_addr,  sizeof(serv_addr)) < 0)     /*binding with the new port*/
   error("ERROR on binding");
   listen(sockfd,5);
   clilen = sizeof(cli_addr);
   newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
   if (newsockfd < 0)
   error("ERROR on accept");
   printf("port changed\n");
   bzero(buffer,256);
   n = read(newsockfd,buffer,255);
   if (n < 0) error("ERROR reading from socket");
   printf("Here is the message: %s\n",buffer);
   n = write(newsockfd,"I got your message",18);
   if (n < 0) error("ERROR writing to socket");
  }
  else
  {
   printf("Here is the message: %s\n",buffer);
   n = write(newsockfd,"I got your message",18);
   if (n < 0) error("ERROR writing to socket");
   close(newsockfd);
   close(sockfd);
  }

在满足条件的上述代码中,正在执行两个代码而不是代码1。此循环无法正常工作。可能是什么原因??? 我想专注于部分。

1 个答案:

答案 0 :(得分:0)

解决这个问题的两种方法:

A)。进入调试器,你很可能会发现你的代码并不像你想象的那样。

B)。用简单的结构替换你的复杂代码。

if (strcmp(buffer,"change work")!=0) 
   { printf("yes") } 
else 
   {  printf("no"); }

你会发现这很好用,然后进行增量更改,把它变回你的真实代码,在某些时候你会“aha”。

根据您的上次评论编辑:

我的猜测是缓冲区并不完全包含“更改工作”,但也可能是换行符或其他此类分隔符。您可能会从添加诊断跟踪语句以显示缓冲区内容中受益,请使用java.util.logging或log4j。