《TCP/IP網路程式設計》第5章 筆記&程式碼&註釋
阿新 • • 發佈:2018-12-05
在第四章中的回聲迭代客戶端中,客戶端通過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;
完美回升迭代伺服器端/客戶端程式碼: