CSAPP:第十一章 网络编程

11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口

11.1 客户端服务器模型

  每个网络应用都是基于客户端-服务器模型。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。
  客户端-服务器模型的基本操作是事务。一个客户端-服务器事务由以下四步组成。

  • 当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。
  • 服务器收到请求后,解释它,并以适当的方式操作它的资源。
  • 服务器给客户端发送一个响应,并等待下一个请求。
  • 客户端收到响应并处理它。

11.2 全球IP因特网

  客户端和服务器通常运行在不同的主机上,并且通过计算机网络的硬件和软件资源来通信。
  全球IP因特网是最著名和最成功的互联网网络实现。每台因特网主机都运行实现TCP/IP协议的软件,几乎每个现代计算机系统都支持这个协议。因特网的客户端和服务器混合使用套接字接口函数和unix I/O函数来进行通信。

11.3 套接字接口

  套接字接口是一组函数,它们和Unix I/O函数结合起来,用以创建网络应用。


11.3.1 套接字的地址结构
  因特网的套接字地址存放在类型sockaddr_in的16字节结构中。对于因特网的应用,sin_family成员是AF_INET,sin_port成员是一个16位的端口号,sin_addr成员就是一个32位IP地址。IP地址和端口号总是以网络字序(大端模式)存放的。

 1/* IP socket address structure */ 2struct sockaddr_in { 3    uint16_t       sin_family;     /* Protocol family (always AF_INET)*/ 4    uint16_t       sin_port;       /* Port number in network byte order */ 5    struct in_addr sin_addr;       /* IP address in network byte order */ 6    unsigned char  sin_zero[8];    /* Pad to sizeof(struct sockaddr) */ 7}; 8 9/* Generic socket address structure for(connect,bind and accept)*/10struct sockaddr{11    uint16_t sa_family;   /* Protocol family */12    char     sa_data[14]; /* address data */13};

11.3.2 socket函数
  客户端和服务器使用socket函数来创建一个套接字描述符。

1#include <sys/types.h>          /* See NOTES */2#include <sys/socket.h>34int socket(int domain, int type, int protocol);//若成功,返回套接字描述符;失败返回-1

11.3.3 connect函数
  客户端通过调用connect函数来建立和服务器的连接。connect函数试图与套接字地址为addr的服务器建立一个因特网连接,其中addrlen是sizeof(sockaddr_in)。connect函数会阻塞,一直到连接成功建立或者发生错误。

1#include <sys/types.h>          /* See NOTES */2#include <sys/socket.h>34int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

11.3.4 bind函数
  剩下的套接字函数--bind,listen和accept,服务器用它们来和客户端建立连接。

1#include <sys/types.h>          /* See NOTES */2#include <sys/socket.h>34int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

  bind函数告诉内核 addr中的服务器套接字地址和套接字描述符sockfd联系起来
11.3.5 listen函数
  客户端是发生连接请求的主动实体。服务器是等待客户端的连接请求的被动实体。默认情况下,内核会认为socket函数创建的描述符对应于主动套接字,它存在于一个连接的客户端。服务器调用listen函数告诉内核,描述符是被服务器使用而不是客户端。

1#include <sys/types.h>          /* See NOTES */2#include <sys/socket.h>34int listen(int sockfd, int backlog);

  listen函数将sockfd从一个主动套接字转化为一个监听套接字,该套接字可以接受来自客户端的连接请求.backlog参数暗示了内核在开始拒绝连接请求前,队列中要排队的未完成的连接请求的数量。
11.3.6 accept函数
  服务器通过调用accept函数来等待来自客户端的连接请求。

1#include <sys/types.h>          /* See NOTES */2#include <sys/socket.h>34int accept(int listenfd, struct sockaddr *addr, socklen_t *addrlen);

  accept函数等待来自客户端的连接请求到达侦听描述符listenfd,然后在addr中填写客户端的套接字地址,并返回一个已连接描述符,这个描述符可以被用来利用Unix I/O函数与客户端通信。

转载于:https://www.cnblogs.com/ywx123/p/10371897.html

CSAPP:第十一章 网络编程相关推荐

  1. CSAPP第十一章 网络编程

    客户端-服务器编程模型 套接字对  套接字接口 基于套接字接口的网络应用概述

  2. 【正点原子Linux连载】第十一章 网络编程 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  3. note-PythonCookbook-第十一章 网络与WEB编程

    第十一章 网络与WEB编程 11.1 作为客户端与HTTP服务交互 requests模块 11.2 创建 TCP 服务器 简单的应答服务器 from socketserver import BaseR ...

  4. CSAPP:第12章 并发编程

    CSAPP:第12章 并发编程 文章目录 CSAPP:第12章 并发编程 12.1 基于进程的并发编程(Process-based) 12.1.1 基于进程的并发服务器 12.1.2 进程的优劣 12 ...

  5. 泄漏计算机网络安全法情节,第十一章网络安全法第十二章电子商务纠纷的法律解决详细分解.doc...

    第十一章 网络安全法 第一节 计算机网络安全概述 第二节 计算机与网络犯罪概述 第三节 计算机网络安全法律规范 (一)名词解释 1,计算机信息网络安全:"为数据处理系统建立和采用的技术和管理 ...

  6. Java基础学习——第十四章 网络编程

    Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...

  7. Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正

    在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...

  8. JavaScript权威指南 第15章 网络编程 第三部分

    JavaScript权威指南 第15章 网络编程 第三部分 可伸缩矢量图形 15.7.1 在HTML中使用SVG 15.7.2 编程操作SVG 15.7.3 通过JavaScript创建SVG图片 1 ...

  9. 【Netty】第二章 网络编程和 IO 概念剖析

    [Netty]第二章 网络编程 文章目录 [Netty]第二章 网络编程 一.网络编程 1.模拟阻塞模式下服务器单线程处理请求 2.模拟非阻塞模式下服务器单线程处理请求 3.使用 Selector 改 ...

最新文章

  1. Oracle 变量绑定与变量窥视合集系列二
  2. FreeRTOS高级篇7---FreeRTOS内存管理分析
  3. 洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares
  4. Supplier接口练习之获取最大值
  5. 使用nfs映射远程服务器磁盘目录
  6. Axure 8 Tab制作
  7. 【5.0】对象生命周期及crud操作
  8. 对FT证券系统故障的分析与思考
  9. mongodb用户信息管理案例
  10. Linux下编译链接动态库符号问题
  11. 关于insert和periodic的问题
  12. 【网页设计】期末大作业html+css(B站首页 1页 带js轮播)
  13. php一年过去多少天,php获取一年有多少天
  14. 飞桨火力全开,重磅上线3D模型:PointNet++、PointRCNN!
  15. Burpsuite工具与浏览器之间设置代理、安装证书
  16. java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)
  17. Web:移动商城首页的页眉和页脚的布局和flex项目三个属性
  18. 计算机电路计数器pl什么意思,计数器原理—不懂就要看哦~~
  19. 108颗佛珠的含义,每颗佛珠都有含义
  20. 万能种子搜索器p2p官方版

热门文章

  1. Windows系统下搭建Git本地代码库
  2. 【STC15库函数上手笔记】9、硬件SPI
  3. 实例讲解getopt()函数的使用
  4. Exynos4412 ADC 设备驱动开发
  5. [JS] Invalid Date
  6. 使用composer下载依赖包下载失败的解决方法
  7. cygwin This indicates that the /etc/passwd (and possibly /etc/group) files should be rebuilt 问题解决办法
  8. /deep/使用方式方式;/deep/无效; ::v-deep和>>>使用;
  9. JAVA进阶day06内部类和匿名类
  10. React开发(231):常见手机号邮箱的正则