c/c++ 網絡編程 read,write函數深入理解


read,write函數深入理解

1,服務端的write函數,可以指定發送數據的長度(第三個參數length)

write(connfd, &buff[i], length);

2,客戶端的read函數,可以指定收取數據的長度(第三個參數length)

read(sockfd, recvline, length)

問題來了,假設要發送的數據的總長度為20,服務端調用write函數時,是放在循環里調用,每次發送的長度設置為1,所以全部發完,需要循環20次,也就是調用了20次的write函數。然后,客戶端的read函數調用如下面所示,計數器cnt的值為多少???

  int cnt = 0;
  while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
    cnt += 1;
    recvline[n] = 0;	/* null terminate */
    if (fputs(recvline, stdout) == EOF)
      err_sys("fputs error");
  }
  printf("count:%d\n", cnt);

根據運行服務端的程序的機器和運行客戶端程序的機器不同,而不同。

  • 如果客戶程序和服務器程序運行在一個主機上的話,計數器通常是1。
  • 如果客戶運行在Solaris上,而服務器運行在BSD上,那么計數器通常是2。第一個字符被分成1組,剩余的19個字符分為1組,所以計數器是2。
  • 如果客戶運行在BSD上,服務器運行在Solaris上,那么計數器是20。每個字符被分成1組,所以計數器是20。

想強調的是:針對不同的環境,我們的程序必須作好為字節流讀入這些數據的准備,直到遇上數據流的末尾

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM