《TCP/IP网络编程》第5章 笔记&代码&注释

在第四章中的回声迭代客户端中,客户端通过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;

完美回升迭代服务器端/客户端代码:

https://github.com/ChristmasError/TCP-IP-Network-programming/tree/master/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E5%9F%BA%E4%BA%8ETCP%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%26%E5%AE%A2%E6%88%B7%E7%AB%AF(2)

猜你喜欢

转载自blog.csdn.net/qq_43265890/article/details/84786567