在第四章中的回声迭代客户端中,客户端通过write()一次性将字符串发送过去,之后调用read()等待接受自己传输的字符串,因此这个回声迭代客户端是不完美的。
解决方法就是提前确定接受数据的大小:
//Linux
while(1)
{
//......相同省略
int str_len=write(sock,message,strlen(message));
int recv_len = 0;
while(recv_len<str_len)
{
int recv_cnt=read(sock,&message[recv_len],BUF_SIZE-1);
if(recv_cnt==-1)
errorHandling("....");
recv_len+=recv_cnt;
}
}
如果不是客户端的问题,我们可以像之前一样给客户端定义应用层协议:
if (!strcmp(message, "q\n") || !strcmp(message, "Q\n"))
break;
完美回升迭代服务器端/客户端代码: