1. 程式人生 > >《TCP/IP網路程式設計》第5章 筆記&程式碼&註釋

《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)