zoukankan      html  css  js  c++  java
  • 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
    ", cnt);
    

    根据运行服务端的程序的机器和运行客户端程序的机器不同,而不同。

    • 如果客户程序和服务器程序运行在一个主机上的话,计数器通常是1。
    • 如果客户运行在Solaris上,而服务器运行在BSD上,那么计数器通常是2。第一个字符被分成1组,剩余的19个字符分为1组,所以计数器是2。
    • 如果客户运行在BSD上,服务器运行在Solaris上,那么计数器是20。每个字符被分成1组,所以计数器是20。

    想强调的是:针对不同的环境,我们的程序必须作好为字节流读入这些数据的准备,直到遇上数据流的末尾

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    根据View获取该控制器
    富文本
    自定义cell,根据数据源,要对cell的布局进行调整,没有实现调整的相应效果
    NSTimer定时器
    textFiled输入字数的控制问题之—把带输入的拼音也判断了
    iOS 最值宏定义
    ios7.1 masonry布局中出现的问题
    串行队列、并行队列、同步、异步
    商标数字整数申请流程
    商标网上申请流程
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10536026.html
Copyright © 2011-2022 走看看