




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 网络应用的标准模型是 模型 随着Internet技术的兴起 B S模型是对C S 模型的一种 或者 2 C S与B S模式主要区别包括 等方面 3 标识一条 TCP 连接的 4 个信息为 4 Linux 支持多种套接字类型 即应用程序希望的通信服务类型 如 5 监听套接字是基本 socket 函数 的返回值 连接套接字是基本 socket 函 数 的返回值 6 高级 socket 函数 int send int sockfd void buf int len int flags 当 flags 0 相当于基本 socket 函数中的 函数 当 flags MSG OOB 表示 7 高级 socket 函数 int recvfrom int sockfd void buf int len unsigned char flags struct socketaddr from socklen t addrlen 用于 8 创建原始套接字时 socket 函数的三个参数分别是 和 9 有些流行的网络应用程序适合用基于 IP 的原始套接字实现 如 10 系统创建新进程 并为该子进程准备 段 段和 段 11 子进程终止时 如果父进程存在且未处理 信号 则 变为僵尸进程 12 有父子等亲缘关系的进程间通信方法 可采用 13 TCP 发送多字节带外数据 send sockfd EDF 3 MSG OOB 则 被系统认定为 带外数据 14 多进程 TCP 并发服务器模型有 1 简述循环 迭代 并发服务器及其特点 2 请画出基于 TCP 套接字的网络编程模型框架图 3 请写出两组常用的字节排序函数 并说明其含意 4 请写出简单的基于 UDP 套接字的服务器端网络程序模板 5 请写出 socket 选项 SO REUSEADDR 的作用和使用方法 6 请简述多路复用 I O 模型的原理 7 请画出 inetd 守护进程的工作流程图 8 请写出简单的基于 UDP 套接字的客户端网络程序模板 1 编程产生子进程 孙进程 即子进程的子进程 并使进程按 孙 子 父 的顺序结束 要求清除所有僵尸进程 2 编程实现如下 TCP 多进程网络程序 1 服务器等待接收客户的连接请求 一旦连接成功则显示客户地址 接着接收客户端的 名称并显示 然后接收来自该客户的字符串 每当收到一个字符串时 显示该字符串 并将 字符串按照恺撒密码的加密方式 K 3 进行加密 再将加密后的字符发回客户端 之后 继续等待接收该客户的信息 直到客户关闭连接 要求服务器具有同时处理多个客户请求的 能力 2 客户首先与相应的服务器建立连接 接着接收用户输入的客户端名称 并将其发送给 服务器 然后继续接收用户输入的字符串 再将字符串发送给服务器 同时接收服务器发回 的加密后的字符串并显示 之后 继续等待用户输入字符串 直到用户输入 Ctrl D 客户 关闭连接并退出 1 C S 变化 改进 2 硬件环境不同 安全要求不同 程序架构不同 软件重用不同 系统维护不同 3 本地 IP 本地端口 对方 IP 对方端口 4 SOCKET STREAM SOCKET DGRAM SOCKET RAW 5 socket accept 6 write 发送带外数据 7 接收 UDP 数据包 8 AF INET SOCK RAW PPROTO ICMP IGMP IP 9 ping 程序 10 数据 堆栈 代码 11 SIGCHLD 子进程 12 管道 pipe 非命名 UNIX 域 socket socketpair 13 F 14 一个子进程对应一个客户端 延迟创建子进程 预创建子进程 多路复用 I O 1 循环服务器 任一时刻只处理一个客户机请求 处理请求过程中下一请求等待 1 分 节省服务器资源 响应时间长 适合处理非耗时请求 2 分 并发服务器 并发执行 每收到一个连接请求创建一个进程处理该连接 服务器继续等待下一连接 1 分 响应速度快 占用系统资源多 2 分 2 下图 一行一分 3 include uint16 t htons uint16 t hostshort uint32 t htonl uint32 t hostlong 均返回 网络字节序值 1 分 uint16 t ntohs uint16 t netshort uint32 t ntohl uint32 t netlong 均返回 主机字节序值 1 分 h 主机 n 网络 s 短整数 端口号 l 长整数 IP 地址 各 1 分 4 include include inlcude int main void int socketfd 1 分 if sockfd socket AF INET SOCK DGRAM 0 1 2 分 perror Create socket failed exit 1 Bind socket to address 1 分 loop 1 分 recvfrom receive and process data from client sendto send resuts to client close sockfd 1 分 5 作用 快速重启服务器程序 2 分 启动服务器程序的多个实例 绑定本地 IP 地址的多个别名 2 分 使用方法 int opt SO REUSEADDR 1 1 分 setsockopt listenfd SOL SOCKET SO REUSEADDR 1 分 6 int select int maxfd fd set rdset fd set wrest fd set exset struct timeval timeout 2 分 select 函数检查侦听 socket 是否有连接到达 已连接 socket 是否有数据到达 已连接 socket 是否可以写数据 2 分 在测试是否可读的描述符集合 rdset 中同时包含侦听 socket 和已连接 socket 在测试是否可 写描述符集合中包含已连接 socket 就可以实现多路复用 2 分 7 每行 1 分 8 include include inlcude int main void int sockfd 1 分 if sockfd socket AF INET SOCK DGRAM 0 1 2 分 perror Create socket failed exit 1 sendto send data to the server 1 分 recvfrom receive data from the server 1 分 close sockfd 1 分 1 Int son pid Int grandson pid 1 分 If son pid fork 0 1 分 儿进程 1 分 If grandson pid fork 0 1 分 孙进程 1 分 exit 1 分 else 1 分 儿进程 1 分 wait 1 分 exit 1 分 else 父进程 wait exit 1 分 2 服务器端 include include include include include include include include define PORT 1546 define BACKLOG 5 define MAXDATASIZE 1024 void caesar char str void process client int connfd struct sockaddr in client int main int listenfd connfd pid t pid struct sockaddr in server client socklen t len 2分 if listenfd socket AF INET SOCK STREAM 0 1 perror Create socked faild n exit 1 int opt SO REUSEADDR setsockopt listenfd SOL SOCKET SO REUSEADDR bzero server sin family AF INET server sin addr s addr htonl INADDR ANY server sin port htons PORT if bind listenfd struct sockaddr exit 1 if listen listenfd BACKLOG 1 perror listen error n exit 1 len sizeof client while 1 if connfd accept listenfd struct sockaddr exit 1 3分 if pid fork 0 close connfd continue else if pid 0 close listenfd process client connfd client else perror fork error n exit 1 close listenfd return 0 1分 void caesar char str while str if str a printf Received client s message s client name recvbuf bcopy recvbuf sendbuf num 1 caesar sendbuf send connfd sendbuf strlen sendbuf 0 客户端 include include include include include include include include define PORT 1546 define MAXDATASIZE 1024 void process FILE fp int sockfd char getMessage char sendline int len FILE fp int main int argc char argv int sockfd struct hostent he struct sockaddr in server if argc 2 printf USAGE s n argv 0 exit 1 1分 if he gethostbyname argv 1 NULL perror gethostbyname error n exit 1 1分 if sockfd socket AF INET SOCK STREAM 0 1 perror socket error n exit 1 1分 bzero server sin family AF INET server sin port htons PORT server sin addr struct in addr he h addr 1分 if connect sockfd struct sockaddr exit 1 process stdin sockfd close sockfd return 0 void process FILE fp int sockfd char sendline MAXDATASIZE 1 char recvline MAXDATASIZE 1 int num printf connected to server n printf Input client s name if fgets sendline MAXDATASIZE fp NULL printf nExit n return send sockfd sendline strlen sendline 0 while getMessage sendline MAXDATASIZE fp NULL send sockfd sendline strlen sendline 0 if num recv sockfd recvline MAXDATASIZE 0 0 printf Server terminated n return recvline num 0 printf server Message s recvline printf nExit n char getMessage char sendline int len FILE fp printf Input string to server return fgets sendline len fp 1分 1 C S模式的网络编程包括通信 和 端的设计 重点在于通信 端的设计 B S模型的特点是 瘦 端 胖 端 2 C S模型是非对称模型 主要体现在 和 上 3 socket 套接字是位于 TCP IP 4 层协议的 层和 层之间的应用程 序接口 API 它支持多种通信协议 如 4 Linux 支持多种套接字类型 即应用程序希望的通信服务类型 如 5 基本 socket 函数 socke 和 accept 的返回值应分别赋值给 和 套接字文件描述符 6 高级 socket 函数 int recv int sockfd void buf int len int flags 当 flags 0 相当于基本 socket 函数中的 函数 当 flags MSG OOB 表示 7 高级 socket 函数 int sendto int sockfd const void buf int len unsigned char flags struct socketaddr to int tolen 用于 8 有些流行的网络应用程序适合用基于UDP的网络编程实现 如 9 创建原始套接字时 要求用户权限为 10 父 子进程共享 段 而父进程的 段和 段被复制 copy on write 给子进程 11 系统调用 终止子进程 并向父进程发送 信号 12 无父子等亲缘关系的进程间通信方法 可采用 13 TCP 支持 字节的带外数据 14 Linux 系统主要实现了四种输入 输出 I O 模型 即 和 1 简述有连接网络程序的执行过程 2 请写出简单的基于 TCP 套接字的服务器端网络程序模板 3 网络编程时 为什么要考虑字节顺序问题 4 请画出基于 UDP 套接字的网络编程模型框架图 5 请简述 shutdown 和 close 的区别 6 请简述多路复用 I O 模型的服务器处理过程 7 简述将用户进程转换为守护进程的步骤 8 请写出简单的基于 TCP 套接字的客户端网络程序模板 1 编程实现调用 fork 两次 使孙子进程成为孤儿进程 由 init 进程管理 领养 从而清除 僵尸进程的方法 2 编程实现如下 TCP 多进程网络程序 1 服务器等待接收客户的连接请求 一旦连接成功则向客户发送欢迎信息 接着接收客 户端的名称并显示 然后接收来自该客户的字符串 将该符串反转 并将结果送回客户 要 求服务器具有同时处理多个客户请求的能力 2 客户首先与相应的服务器建立连接 接着接收用户输入的客户端名称 并将其发送给 服务器 然后继续接收用户输入的字符串 再将字符串发送给服务器 同时接收服务器发回 的反转字符串并显示 之后 继续等待用户输入字符串 直到用户输入 Ctrl D 客户关闭 连接并退出 1 客户 服务器 服务器 客户 服务器 2 软件结构 工作过程 3 应用 传输 Unix INET INET6 4 SOCKET STREAM SOCKET DGRAM SOCKET RAW 5 监 侦听套接字 连接套接字 6 read 接收带外数据 7 发送 UDP 数据包 8 DNS 域名系统 NFS 网络文件系统 SNMP 简单网络管理协议 或 即时通信 IP 电话 实 时视频 9 超级 root 用户 10 代码 数据 堆栈 11 exit SIGCHLD 12 命名管道 命名 UNIX 域 socket 13 1 14 阻塞式 I O 模型 默认 I O 模型 非阻塞式 I O 模型 多路复用 I O 模型 信号驱动 I O 模 型 1 服务程序启动 1 分 客户程序启动 1 分 客户端与服务器建立连接 1 分 客户端发送请求 1 分 服务器处理请求 返回响应 1 分 服务器断开连接 等待下一个请求 1 分 2 include some header files int main void int sockfd connect sock if sockfd socket AF INET SOCK STREAM 0 1 1 分 perror create socket failed exit 1 bind sockfd to some address 1 分 listen 1 分 loop 1 分 if connect sock accept sockfd NULL NULL 1 1 分 perror Accept error exit 1 read and process request close connect sock close sockfd 1 分 3 不同机器表示数据的字节顺序是不同的 为保证 大端 和 小端 字节序的机器之间 能相互通信 需在发送多字节整数时 将主机字节序转换成网络字节序 或反之 答出这 即可 答下面也可 Intel 芯片 低字节在前 高字节在后 称 little endian RISC 芯片 高字节在前 低字节在后 称 big endian 4 前两行各 1 分 后两行各 2 分 5 shutdown 操作连接通道 其他进程不能再使用已被关闭的通道 close 操作描述符 其他 进程仍然可以使用该 socket 描述符 3 分 close 关闭应用程序进程与 socket 的接口 调用 close 之后该应用程序进程不能再读写这个 socket shutdown 可以只关闭一个通道 另一个通道仍然可以操作 3 分 6 设置读和写描述符集合 其中读描述符集合包括侦听 socket 1 分 调用 select 测试 socket 描述符是否就绪 1 分 侦听 socket 就绪则接收新连接 1 分 其他 socket 就绪则执行读写操作 1 分 重复步骤 1 4 1 分 要求将所有 socket 描述符设置为非阻塞方式 1 分 7 调用 fork 然后父进程退出 子进程 继续运行 0 5 分 调用 setsid 创建新的 session 成为头进程 0 5 分 忽略信号 SIGHUP 再次调用 fork 然后父进程 session 的头进程 退出 1 分 调用函数 chdir 使进程不使用任何目录 1 分 调用函数 unmask 0 使进程对任何写的内容有权限 1 分 关闭所有打开的文件描述符 0 5 分 为标准输入 0 标准输出 1 标准错误输出 2 打开新的文件描述符 0 5 分 处理信号 SIGCLD 避免守护进程的子进程成为僵尸进程 1 分 8 include some header files 1 分 int main void int sockfd 1 分 if sockfd socket AF INET SOCK STREAM 0 1 1 分 perror Create socket failed exit 1 connect to server 1 分 send requst and receive response 1 分 close sockfd 1 分 int main int i pid t pid 1分 pid fork 1分 if pid 0 2分 子进程1 cout first child proc getpid endl for i 0 i 5 i if fork 0 2分 子进程2 3 4 5 6 cout child getpid endl sleep 1 exit 0 2分 exit 0 1分 for 2分 2 服务器端 include include include include include include include include include define PORT 1234 define BACKLOG 2 define MAXCHARSIZE 1000 void process client int connectfd struct sockaddr in client int main void int listenfd connectfd struct sockaddr in server client int sin size int opt SO REUSEADDR pid t pid 2分 if listenfd socket AF INET SOCK STREAM 0 1 perror Create socket failed exit 1 setsockopt listenfd SOL SOCKET SO REUSEADDR bzero server sin family AF INET server sin port htons PORT server sin addr s addr htonl INADDR ANY if bind listenfd struct sockaddr exit 1 if listen listenfd BACKLOG 1 perror listen error exit 1 sin size sizeof struct sockaddr in while 1 if connectfd accept listenfd struct sockaddr exit 1 3分 if pid fork 0 close connectfd continue else if pid 0 close listenfd process client connectfd client exit 1 else perror Fork error n exit 0 close listenfd 1分 void process client int connectfd struct sockaddr in client char recvbuf MAXCHARSIZE char sendbuf MAXCHARSIZE char client name MAXCHARSIZE int recvlen i printf You get a connection from s n inet ntoa client sin addr send connectfd Welcome to my server n 22 0 recvlen recv connectfd client name MAXCHARSIZE 0 if recvlen 0 close connectfd printf Client disconnected n return else if recvlen 0 close connectfd printf Connect broked n return client name recvlen 0 printf Client name is s n client name while recvlen recv connectfd recvbuf MAXCHARSIZE 0 recvbuf recvlen 0 printf Receive from client message s n client name recvbuf for i 0 i recvlen i sendbuf i recvbuf recvlen i 1 sendbuf recvlen 0 send connectfd sendbuf strlen sendbuf 0 printf Client s disconnected n client name close connectfd 客户端 include include include include include include include define PORT 1234 define MAXDATASIZE 1000 int main int argc char argv int fd numbytes char buf MAXDATASIZE struct hostent he struct sockaddr in server int i 1 if argc 2 printf Usage s n argv 0 exit 1 1分 if he gethostbyname argv 1 NULL perror gethostbyname error exit 1 1分 if fd socket AF INET SOCK STREAM 0 1 perror Create socket failed exit 1 1分 bzero server sin family AF INET server sin port htons PORT server sin addr struct in addr he h addr 1分 if connect fd struct sockaddr exit 1 if numbytes recv fd buf MAXDATASIZE 0 1 perror recv error exit 1 buf numbytes 0 printf Server Message s n buf printf Input your name scanf s buf if numbytes send fd buf strlen buf 0 1 perror Send error exit 1 1分 while i printf Input message max char d MAXDATASIZE scanf s buf if strlen buf 0 1分 close connectfd 1分 continue 1分 else if pid 0 1分 close listenfd 1分 process client connectfd client exit 1 1分 6 图 1 分 每个实现步骤要点各 1 分 1 服务器建立 socket 并创建一定数量子进程 2 服务器父进程维护所有子进程的状态表 父进程和子进程通过管道通信 3 子进程接收连接时给父进程发 1 关闭连接时发 0 4 父进程收到 1 时检查空闲子进程数目是否小于下限 小于下限则创建新的子进程 5 父进程收到 0 时检查空闲子进程数目是否大于上限 大于上限则终止一些子进程 7 设置读和写描述符集合 其中读描述符集合包括侦听 socket 1 分 调用 select 测试 socket 描述符是否就绪 1 分 侦听 socket 就绪则接收新连接 1 分 其他 socket 就绪则执行读写操作 1 分 重复步骤 1 4 1 分 要求将所有 socket 描述符设置为非阻塞方式 1 分 1 include include include include include include using namespace std void sigchld handler int int main struct sigaction act 1分 int i act sa handler sigchld handler 2分 act sa flags 0 sigemptyset if sigaction SIGCHLD exit 1 for i 0 i 3 i if fork 0 2分 cout child getpid 0 2分 cout child pid died WEXITSTATUS stat endl 2 服务器端 include include include include include include include include include define PORT 1234 define BACKLOG 2 define MAXCHARSIZE 1000 int main void int listenfd connectfd struct sockaddr in server client int sin size int opt SO REUSEADDR pid t pid 1分 if listenfd socket AF INET SOCK STREAM 0 1 perror Create socket failed exit 1 setsockopt listenfd SOL SOCKET SO REUSEADDR bzero server sin family AF INET server sin port htons PORT server sin addr s addr htonl INADDR ANY 1分 if bind listenfd struct sockaddr exit 1 1分 if listen listenfd BACKLOG 1 perror listen error exit 1 sin size sizeof struct sockaddr in while 1 if connectfd accept listenfd struct sockaddr exit 1 3分 if pid fork 0 close connectfd continue else if pid 0 close listenfd process client connectfd client exit 1 else perror Fork error n exit 0 close listenfd 2分 void process client int connectfd struct sockaddr in client char recvbuf MAXCHARSIZE char sendbuf MAXCHARSIZE char client name MAXCHARSIZE int recvlen i printf You get a connection from s n inet ntoa client sin addr send connectfd Welcome to my server n 22 0 recvlen recv connectfd client name MAXCHARSIZE 0 if recvlen 0 close connectfd printf Client disconnected n return else if recvlen 0 close connectfd printf Connect broked n return client name recvlen 0 printf Client name is s n client name while recvlen recv connectfd recvbuf MAXCHARSIZE 0 recvbuf recvlen 0 printf Receive from client message s n client name recvbuf send connectfd recvbuf strlen sendbuf 0 printf Client s disconnected n client name close connectfd 客户端 include include include include include include include define PORT 1234 define MAXDATASIZE 1000 int main int argc char argv int fd numbytes char buf MAXDATASIZE struct hostent he struct sockaddr in server int i 1 if argc 2 printf Usage s n argv 0 exit 1 1分 if he gethostbyname argv 1 NULL perror gethostbyname error exit 1 1分 if fd socket AF INET SOCK STREAM 0 1 perror Create socket failed exit 1 1分 bzero server sin family AF INET server sin port htons PORT server sin addr struct in addr he h addr 1分 if connect fd struct sockaddr exit 1 if numbytes recv fd buf MAXDATASIZE 0 1 perror recv error exit 1 buf numbytes 0 printf Server Message s n buf printf Input your name scanf s buf if numbytes send fd buf strlen buf 0 1 perror Send error exit 1 2分 while i printf Input message max char d MAXDATASIZE scanf s buf if strlen buf 1 i 0 if numbytes send fd buf strlen buf 0 1 perror Send error exit 1 if numbytes recv fd buf MAXDATASIZE 0 1 perror read error n exit 1 buf numbytes 0 printf Server message s n buf printf n close fd 1 C S模式的网络编程包括通信 端的设计 A 客户 B 服务器 C 客户和服务器 D 以上都不对 2 B S 模型是对 C S 模型的 A 变化或改进 B 二者毫无关系 C 二者没有区别 D 以上都不对 3 提供双向 可靠数据流通信的网络程序是基于 编程实现的 A 原始套接字 B 数据链路 C TCP 协议 D UDP 协议 4 提供双向 不可靠数据报通信的网络程序是基于 编程实现的 A 原始套接字 B 数据链路 C TCP 协议 D UDP 协议 5 socket 套接字是位于 TCP IP 4 层协议的 层之间的应用程序接口 API A 传输层和网络层 B 网络层和链路层 C 传输层和链路层 D 应用层和传输层 6 使用 TCP 套接字时 实现 三次握手 连接的函数是 A bind B connect C socket D write 7 基本 socket 函数 socket 的返回值应赋值给 套接字文件描述符 A 绑定 B 读 写 C 监 侦听 D 连接 8 使用 fork 函数产生子进程后 父进程的 段被复制 copy on write 给子进程 A 数据段 B 堆栈段 C 代码段 D 堆栈段和数据段 9 fork 函数的返回值等于 0 时 表明 在运行 A 子进程 B 守护进程 C 父进程 D 以上都不对 10 调用 fork 函数产生子进程后 进程的运行顺序是 A 先运行父进程 后运行子进程 B 先运行子进程 后运行父进程 C 先运行进程号较小的进程 D 不确定 11 以下函数中可以清除 Zombie 僵尸 进程的函数是 A close B exit C waitpid D shutdown 12 非命名 UNIX 域 socket socketpair 是以 方式通信的 A 全双工 B 单向通信 C 可全双工亦可单向通信 D 以上都不对 13 以下 程序是基于原始套接字实现的 A Telnet B FTP C ping D QQ 14 ICMP 数据包一定是被封装在 数据包中传输的 A UDP B IP C TCP D ATM 15 使用 UDP 协议时 调用函数 connect 可以 A 获取通信另一方的 IP 地址 B 启动三次握手操作 C 获取通信另一方的接收队列长度 D 获取通信另一方接收缓存区的大小 1 简述 Client Server 和 Browser Server 的区别 2 标识一条 TCP 连接的信息有哪些 3 套接字支持的通信协议有哪些 4 请画出基于 TCP 套接字的网络编程模型框架图 5 请简述 shutdown 和 close 的区别 6 图文并茂说明 TCP 并发服务器模型 预创建子进程 固定子进程数量 传递 socket 描述符 的实现过程 7 简述多路复用 I O 的优缺点及适用场合 8 请简述广播和多播编程的异同点 1 编程实现调用函数 wait 等待子进程的方法 清除由同一循环代码产生的 3 个子进程所形 成的僵尸项 2 编程实现如下 TCP 多进程网络程序 1 服务器等待接收客户的连接请求 一旦连接成功则向客户发送欢迎信息 接着接收客 户端的名称并显示 然后接收来自该客户的字符串 将该符串反转 并将结果送回客户 要 求服务器具有同时处理多个客户请求的能力 2 客户首先与相应的服务器建立连接 接着接收用户输入的客户端名称 并将其发送给 服务器 然后继续接收用户输入的字符串 再将字符串发送给服务器 同时接收服务器发回 的反转字符串并显示 之后 继续等待用户输入字符串 直到用户输入 Ctrl D 客户关闭 连接并退出 CACDD BCDAD CACBA 1 C S 与 B S 模式主要区别包括 硬件环境不同 安全要求不同 程序架构不同 软件重用不 同 系统维护不同等方面 以上每要点 1 分 有展开加 1 分 或加上处理问题 用户接口 信息流 安全性任一项加 1 分 2 本地 IP 2 分 本地端口 1 分 对方 IP 2 分 对方端口 1 分 3 Unix Unix 系统内部协议 2 分 INET IP 版本 4 2 分 INET6 IP 版本 6 或 IPX 2 分 4 下图 一行一分 5 shutdown 操作连接通道 其他进程不能再使用已被关闭的通道 close 操作描述符 其他进 程仍然可以使用该 socket 描述符 3 分 close 关闭应用程序进程与 socket 的接口 调用 close 之后该应用程序进程不能再读写这个 socket shutdown 可以只关闭一个通道 另一个通道仍然可以操作 3 分 6 模型图 2 分 每个实现步骤要点各 1 分 1 服务器建立侦听 socket 并创建固定数量子进程 2 服务器父进程维护所有子进程的状态表 父进程和子进程通过 UNIX 域 socket 通信 3 父进程在有空闲子进程时接收连接 将已连接 socket 描述符传递给空闲子进程 4 子进程处理客户请求 结束后通知父进程 父进程修改子进程状态 7 优点 只需要一个进程来处理所有客户机请求 1 分 没有创建和管理进程的开销 系统资源消耗少 1 分 没有进程间通信 1 分 缺点 服务器必须依次处理所有的请求 编程较复杂 1 分 服务器循环处理所有就绪客户端 可能会造成延时较长 1 分 适用场合 1 分 适合于请求多但请求内容少及批量处理复杂套接字描述符的服务器 1 分 8 共同点 相对单播编程而言 在进程级别上 服务器进程与客户端进程的关系是一对多 基于 UDP 的网络编程 2 分 不同点 广播 局域网 广播地址的最后一位全为 1 二进制 或 255 十进制 2 分 多播 广域网 多播地址为 D 类地址 2 分 1 include include include include include include using namespace std int main int i stat 1分 pid t pid 1分 for i 0 i 3 i 2分 if fork 0 3分 cout child getpid 0 4分 cout child pid died WEXITSTATUS stat endl 2 服务器端 include include include include include include include include include define PORT 1234 define BACKLOG 2 define MAXCHARSIZE 1000 void process client int connectfd struct sockaddr in client int main void int listenfd connectfd struct sockaddr in server client int sin size int opt SO REUSEADDR pid t pid 1分 if listenfd socket AF INET SOCK STREAM 0 1 perror Create socket failed exit 1 setsockopt listenfd SOL SOCKET SO REUSEADDR bzero server sin family AF INET server sin port htons PORT server sin addr s addr htonl INADDR ANY 1分 if bind listenfd struct sockaddr exit 1 1分 if listen listenfd BACKLOG 1 perror listen error exit 1 sin size sizeof struct sockaddr in while 1 if connectfd accept listenfd struct sockaddr exit 1 3分 if pid fork 0 close connectfd continue else if pid 0 close listenfd process client connectfd client exit 1 else perror Fork error n exit 0 close listenfd 2分 void process client int connectfd struct sockaddr in client char recvbuf MAXCHARSIZE char sendbuf MAXCHARSIZE char client name MAXCHARSIZE int recvlen i printf You get a connection from s n inet ntoa client sin addr send connectfd Welcome to my server n 22 0 recvlen recv connectfd client name MAXCHARSIZE 0 if recvlen 0 close connectfd printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玛钢厂面试题及答案
- 湖南衡阳县2026届化学高二第一学期期中达标检测试题含解析
- 飞鸟日语试题及答案
- 电车交互测试题及答案
- 信息运用试题及答案
- 护理师试题及答案
- 质安站招聘考试试题及答案
- 宿舍支架考试题及答案
- 电信实习工作总结
- 保育员先进个人工作总结
- 左手流程-右手人才-章义伍
- 桥梁安全事故案例警示
- 智慧树创意学经济答案-2018创意学经济期末答案
- YY 0054-2023血液透析设备
- 黄冈市临床重点专科申报-模板-副本
- SB/T 10460-2008商用电开水器
- GB/T 9124.1-2019钢制管法兰第1部分:PN系列
- GB/T 29414-2012散热器恒温控制阀
- 2023年黔西县(中小学、幼儿园)教师招聘考试《教育综合知识》题库及答案解析
- GA 1800.2-2021电力系统治安反恐防范要求第2部分:火力发电企业
- 运输供应商年度评价表
评论
0/150
提交评论