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。此循环无法正常工作。可能是什么原因??? 我想专注于部分。
答案 0 :(得分:0)
解决这个问题的两种方法:
A)。进入调试器,你很可能会发现你的代码并不像你想象的那样。
B)。用简单的结构替换你的复杂代码。
if (strcmp(buffer,"change work")!=0)
{ printf("yes") }
else
{ printf("no"); }
你会发现这很好用,然后进行增量更改,把它变回你的真实代码,在某些时候你会“aha”。
根据您的上次评论编辑:
我的猜测是缓冲区并不完全包含“更改工作”,但也可能是换行符或其他此类分隔符。您可能会从添加诊断跟踪语句以显示缓冲区内容中受益,请使用java.util.logging或log4j。