我遇到问题,当我尝试关闭客户端连接时,我想关闭与服务器的连接,当客户端写入一个字符串“q”,我在服务器读取客户端消息后立即执行strcmp,但由于未通过比较而无法工作。我无法关闭服务器和客户端之间的套接字连接
这里是服务器
while(1){
if((n = read(newsocketfd,buffer,sizeof(buffer))) > 0)
printf("(Mlength %d) message from Client: %s\n",n,buffer);
else{
close(socketfd);
close(newsocketfd);
error("Error reading message \n");
}
if(strcmp("q",&buffer[n]) == 0)
printf("El cliente intenta cerrar la conexión %s\n",&buffer[n]);
else
printf("Se recibieron datos desde el cliente %s\n",&buffer[n]);
if(write(newsocketfd,response,255) > 0)
printf("Writing response to Client socket \n");
else
error("Error writing message \n");
}
return EXIT_SUCCESS;
}
下面是客户端
do{
printf("Please, type your message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(socketfd,buffer,sizeof(buffer));
if(n < 0)
error("Error writing to socket \n");
else
printf("...Message sent \n");
n = read(socketfd,buffer,sizeof(buffer));
if(n < 0)
error("Error writing to socket \n");
else
printf("\n Message from server: %s \n",buffer);
}while(strcmp("q",buffer)!=0);
那么,假设缓冲器是可以安全地印有一个printf的空终止字符串(“%S ..)邀请灾害,然后您尝试将“q”与刚刚读取的缓冲区部分之后的未定义字符进行比较:'&buffer [n]'。检查所有的服务器和客户端代码是否有无效的假设 - 接收到的数据保证为空终止,并且TCP传输的消息超过一个字节 - 它不会,它只传输八位字节/字节流,并且通常需要多个读取调用来传输应用程序级协议单元。 –
网络编程有几个陷阱,你必须知道在开始之前。我建议在进一步研究之前阅读其中一本关于网络编程的书。否则,你会不断遇到看起来不直观的事情。 – Johannes